Wie kann ich eine Flutter-Anwendung programmgesteuert schließen? Ich habe versucht, den einzigen Bildschirm zu öffnen, aber das führt zu einem schwarzen Bildschirm.
Wie kann ich eine Flutter-Anwendung programmgesteuert schließen? Ich habe versucht, den einzigen Bildschirm zu öffnen, aber das führt zu einem schwarzen Bildschirm.
Antworten:
SystemNavigator.pop()
: FUNKTIONIERT NICHT
exit(0)
: Funktioniert, aber Apple kann Ihre App aussetzen, da es gegen die Richtlinien von Apple Human Interface verstößt , die App programmgesteuert zu beenden .
SystemNavigator.pop()
: Funktioniert und ist die EMPFOHLENE Methode zum Beenden der App.
exit(0)
: Funktioniert auch, wird jedoch NICHT EMPFOHLEN, da der Dart VM-Prozess sofort beendet wird und der Benutzer möglicherweise denkt, dass die App gerade abgestürzt ist.
exit(0)
für Ihre Bedürfnisse versuchen .
Unten funktionierte perfekt mit mir in beiden Android
und iOS
ich habe exit(0)
von verwendetdart: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 Bevorzugte Lösung ist:
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
Wie hier beschrieben
t work for me... I
versucht, CupertinoTabScafold eine Exit-Schaltfläche hinzuzufügen. Mit () => exit (0) wird ein leerer Bildschirm mit Registerkarten angezeigt.
Sie können dies mit tun SystemNavigator.pop()
.
exit(0);
funktioniert
SystemNavigator.pop
wird ignoriert, da die Richtlinien für die Benutzeroberfläche von Apple besagen, dass Anwendungen sich nicht selbst beenden sollten. Unter Android sollte es funktionieren und wird der dart:io
Exit-Methode des Aufrufs vorgezogen . Erwägen Sie, ein Problem einzureichen
Die Antworten sind bereits vorhanden, aber bitte kopieren Sie diese nicht einfach und fügen Sie sie in Ihre Codebasis ein, ohne zu wissen, was Sie tun:
Wenn Sie den SystemChannels.platform.invokeMethod('SystemNavigator.pop');
Hinweis verwenden , dass das Dokument deutlich erwähnt:
Weist den Systemnavigator an, diese Aktivität vom Stapel zu entfernen und zur vorherigen Aktivität zurückzukehren.
Unter iOS werden Aufrufe dieser Methode ignoriert, da die Richtlinien für die Benutzeroberfläche von Apple besagen, dass Anwendungen sich nicht selbst beenden sollten.
Sie können verwenden exit(0)
. Dadurch wird der Dart VM-Prozess sofort mit dem angegebenen Exit-Code beendet. Aber denken Sie daran, dass der Arzt sagt:
Dies wartet nicht darauf, dass asynchrone Vorgänge beendet werden. Die Verwendung von exit führt daher sehr wahrscheinlich zu Datenverlust.
Wie auch immer, der Arzt hat auch bemerkt SystemChannels.platform.invokeMethod('SystemNavigator.pop');
:
Diese Methode sollte dem Aufruf der Exit-Methode von dart: io vorgezogen werden, da letztere dazu führen kann, dass sich die zugrunde liegende Plattform so verhält, als wäre die Anwendung abgestürzt.
Denken Sie also daran, was Sie tun.
Das hat bei mir funktioniert;
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),
),
);
}
Ich benutze lieber
Future.delayed(const Duration(milliseconds: 1000), () {
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
});
Exit (0) funktioniert zwar auch, aber die App wird abrupt geschlossen und sieht nicht gut aus. Es scheint, dass die App abgestürzt ist.
Future.delayed(const Duration(milliseconds: 1000), () {
exit(0);
});
Unten funktionierte perfekt mit mir sowohl im Android- als auch im iOS-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: ()=> SystemNavigator.pop(),
tooltip: 'Close app',
child: new Icon(Icons.close),
),
);
}
SystemNavigator.pop()
funktioniert nicht in iOS, bitte lesen Sie meine Antwort. Zumindest ab heute gibt es keine Möglichkeit, die iOS-App zu beenden.
SystemNavigator.pop()
es unter dem Android-Emulator nicht funktioniert. Die App arbeitet immer noch im Hintergrund. Ich bin mir also nicht sicher, ob es auf einem echten Gerät richtig funktioniert.