Как я могу программно закрыть приложение Flutter. Я попытался открыть единственный экран, но это привело к черному экрану.
103
SystemNavigator.pop()
: НЕ РАБОТАЕТ
exit(0)
: Работает, но Apple может ПРИОСТАНОВИТЬ ВАШЕ ПРИЛОЖЕНИЕ, поскольку программный выход из приложения противоречит рекомендациям Apple Human Interface.
SystemNavigator.pop()
: Работает, и это РЕКОМЕНДУЕМЫЙ способ выхода из приложения.
exit(0)
: Также работает, но НЕ РЕКОМЕНДУЕТСЯ, так как он немедленно завершает процесс виртуальной машины Dart, и пользователь может подумать, что приложение только что упало.
SystemNavigator.pop()
не работает под эмулятором Android. Приложение все еще работает в фоновом режиме. Поэтому я не уверен, будет ли он правильно работать на реальном устройстве.exit(0)
по своему усмотрению.SystemNavigator.pop()
закрывает мое приложение и показывает сообщение о сбое,exit(0)
работает должным образомНиже отлично работал со мной в обоих,
Android
иiOS
я использовалexit(0)
изdart: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), ), ); }
ОБНОВЛЕНИЕ Январь 2019 г. Предпочтительное решение:
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
Как описано здесь
источник
t work for me... I
пыталось добавить кнопку выхода в CupertinoTabScafold. С () => exit (0) он дает пустой экран с панелью вкладок.Вы можете сделать это с помощью
SystemNavigator.pop()
.источник
exit(0);
действительно работаетSystemNavigator.pop
игнорируется, потому что в рекомендациях Apple по пользовательскому интерфейсу указано, что приложения не должны выходить сами. На Android он должен работать и предпочтительнее, чем вызовdart:io
метода exit. Рассмотрите возможность регистрации проблемы: github.com/flutter/flutter/issues/newОтветы уже предоставлены, но, пожалуйста, не копируйте и вставляйте их в свою базу кода, не зная, что вы делаете:
Если вы используете,
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
обратите внимание, что документ четко упоминает:Вы можете использовать
exit(0)
. И это немедленно завершит процесс Dart VM с заданным кодом выхода. Но помните, что в этом документе говорится:Во всяком случае, документ также отметил
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
:Так что помните, что вы делаете.
источник
Я предпочитаю использовать
Future.delayed(const Duration(milliseconds: 1000), () { SystemChannels.platform.invokeMethod('SystemNavigator.pop'); });
Хотя exit (0) также работает, но приложение внезапно закрывается и выглядит некрасиво, похоже, что приложение разбилось.
Future.delayed(const Duration(milliseconds: 1000), () { exit(0); });
источник
Это сработало для меня;
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), ), ); }
источник
Ниже отлично работал со мной как в Android, так и в iOS: импорт «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()
не работает в iOS, прочтите мой ответ. По крайней мере, на сегодняшний день нет возможности выйти из приложения iOS.