Как я могу программно закрыть приложение Flutter. Я попытался открыть единственный экран, но это привело к черному экрану.
Как я могу программно закрыть приложение Flutter. Я попытался открыть единственный экран, но это привело к черному экрану.
Ответы:
SystemNavigator.pop()
: НЕ РАБОТАЕТ
exit(0)
: Работает, но Apple может ПРИОСТАНОВИТЬ ВАШЕ ПРИЛОЖЕНИЕ, поскольку программный выход из приложения противоречит рекомендациям Apple Human Interface.
SystemNavigator.pop()
: Работает, и это РЕКОМЕНДУЕМЫЙ способ выхода из приложения.
exit(0)
: Также работает, но НЕ РЕКОМЕНДУЕТСЯ, так как он немедленно завершает процесс виртуальной машины Dart, и пользователь может подумать, что приложение только что упало.
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');
обратите внимание, что документ четко упоминает:
Дает указание системному навигатору удалить это действие из стека и вернуться к предыдущему действию.
В iOS вызовы этого метода игнорируются, поскольку в рекомендациях Apple по интерфейсу пользователя указано, что приложения не должны завершать работу сами.
Вы можете использовать exit(0)
. И это немедленно завершит процесс Dart VM с заданным кодом выхода. Но помните, что в этом документе говорится:
Это не ожидает завершения каких-либо асинхронных операций. Поэтому использование exit очень вероятно приведет к потере данных.
Во всяком случае, документ также отметил SystemChannels.platform.invokeMethod('SystemNavigator.pop');
:
Этот метод следует предпочесть вызову метода exit dart: io, поскольку последний может заставить базовую платформу действовать так, как если бы приложение упало.
Так что помните, что вы делаете.
Я предпочитаю использовать
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.
SystemNavigator.pop()
не работает под эмулятором Android. Приложение все еще работает в фоновом режиме. Поэтому я не уверен, будет ли он правильно работать на реальном устройстве.