Bagaimana cara menutup aplikasi Flutter secara terprogram. Saya sudah mencoba memunculkan satu-satunya layar tetapi itu menghasilkan layar hitam.
Bagaimana cara menutup aplikasi Flutter secara terprogram. Saya sudah mencoba memunculkan satu-satunya layar tetapi itu menghasilkan layar hitam.
Jawaban:
SystemNavigator.pop()
: TIDAK BEKERJA
exit(0)
: Berfungsi tetapi Apple dapat MENANGGUHKAN APLIKASI ANDA karena melanggar pedoman Antarmuka Manusia Apple untuk keluar dari aplikasi secara terprogram.
SystemNavigator.pop()
: Bekerja dan merupakan cara yang DIANJURKAN untuk keluar dari aplikasi.
exit(0)
: Juga berfungsi tetapi TIDAK DIANJURKAN karena menghentikan proses VM Dart dengan segera dan pengguna mungkin berpikir bahwa aplikasi baru saja rusak.
exit(0)
untuk kebutuhan Anda.
SystemNavigator.pop()
keluar dari aplikasi saya dan menampilkan pesan macet, exit(0)
berfungsi seperti yang diharapkan
Di bawah bekerja sempurna dengan saya di keduanya Android
dan iOS
, saya digunakan exit(0)
daridart:io
import 'dart:io';
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new ... (...),
floatingActionButton: new FloatingActionButton(
onPressed: ()=> exit(0),
tooltip: 'Close app',
child: new Icon(Icons.close),
),
);
}
UPDATE Jan 2019 Solusi yang lebih disukai adalah:
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
Seperti yang dijelaskan di sini
t work for me... I
mencoba menambahkan tombol keluar ke CupertinoTabScafold. Dengan () => exit (0), ini memberikan layar kosong dengan tabbar.
Anda bisa melakukan ini dengan SystemNavigator.pop()
.
exit(0);
tidak berhasil
SystemNavigator.pop
diabaikan karena pedoman antarmuka manusia Apple menyatakan bahwa aplikasi tidak boleh keluar sendiri. Di Android, ini harus berfungsi, dan lebih disukai daripada memanggil dart:io
metode keluar. Pertimbangkan untuk mengajukan masalah: github.com/flutter/flutter/issues/new
Jawaban sudah disediakan tetapi tolong jangan hanya menyalin dan menempelkannya ke basis kode Anda tanpa mengetahui apa yang Anda lakukan:
Jika Anda menggunakan SystemChannels.platform.invokeMethod('SystemNavigator.pop');
catatan bahwa dokumen dengan jelas menyebutkan:
Perintahkan navigator sistem untuk menghapus aktivitas ini dari tumpukan dan kembali ke aktivitas sebelumnya.
Di iOS, panggilan ke metode ini diabaikan karena pedoman antarmuka manusia Apple menyatakan bahwa aplikasi tidak boleh keluar sendiri.
Anda bisa menggunakan exit(0)
. Dan itu akan menghentikan proses VM Dart segera dengan kode keluar yang diberikan. Tapi ingat dokter itu mengatakan:
Ini tidak menunggu operasi asynchronous berhenti. Oleh karena itu, menggunakan keluar sangat mungkin kehilangan data.
Pokoknya dokter juga mencatat SystemChannels.platform.invokeMethod('SystemNavigator.pop');
:
Metode ini sebaiknya lebih disukai daripada memanggil metode keluar dart: io, karena yang terakhir dapat menyebabkan platform yang mendasarinya bertindak seolah-olah aplikasi macet.
Jadi, ingatlah terus apa yang Anda lakukan.
Saya lebih suka menggunakan
Future.delayed(const Duration(milliseconds: 1000), () {
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
});
Meskipun, exit (0) juga berfungsi tetapi aplikasi menutup secara tiba-tiba dan tidak terlihat bagus, sepertinya aplikasi tersebut macet.
Future.delayed(const Duration(milliseconds: 1000), () {
exit(0);
});
Ini berhasil untuk saya;
import 'dart:io';
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new ... (...),
floatingActionButton: new FloatingActionButton(
onPressed: ()=> exit(0),
tooltip: 'Close app',
child: new Icon(Icons.close),
),
);
}
Anda dapat memanggil ini dengan memeriksa kondisi ketergantungan platform. melakukan tindakan berbeda dengan klik untuk android dan ios.
import 'dart:io' show Platform;
import 'package:flutter/services.dart';
RaisedButton(
onPressed: () {
if (Platform.isAndroid) {
SystemNavigator.pop();
} else if (Platform.isIOS) {
exit(0);
}
},
child: Text("close app"),
)
Di bawah ini bekerja sempurna dengan impor Android 'dart: io';
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new ... (...),
floatingActionButton: new FloatingActionButton(
onPressed: ()=> SystemNavigator.pop(),
tooltip: 'Close app',
child: new Icon(Icons.close),
),
);
}
SystemNavigator.pop()
tidak berfungsi di iOS, harap baca jawaban saya. Tidak ada cara untuk keluar di aplikasi iOS setidaknya untuk hari ini.
SystemNavigator.pop()
tidak berfungsi pada emulator Android. Aplikasi masih bekerja di latar belakang. Jadi saya tidak yakin apakah itu akan berfungsi dengan baik di perangkat nyata.