Як я можу програмно закрити програму Flutter. Я спробував показати єдиний екран, але це призводить до появи чорного екрану.
Як я можу програмно закрити програму Flutter. Я спробував показати єдиний екран, але це призводить до появи чорного екрану.
Відповіді:
SystemNavigator.pop()
: НЕ ПРАЦЮЄ
exit(0)
: Працює, але Apple може ПІДСТАВИТИ ВАШЕ ЗАСТОСУВАННЯ, оскільки це суперечить рекомендаціям Apple Human Interface щодо програмного виходу з програми.
SystemNavigator.pop()
: Працює та є РЕКОМЕНДОВАНИМ способом виходу з програми.
exit(0)
: Також працює, але НЕ РЕКОМЕНДУЄТЬСЯ, оскільки він негайно припиняє процес Dart VM, і користувач може подумати, що додаток щойно зазнав аварії.
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. Якщо () => вихід (0), це дає порожній екран із панеллю вкладок.
Ви можете зробити це за допомогою SystemNavigator.pop()
.
exit(0);
справді спрацьовує
SystemNavigator.pop
ігнорується, оскільки в інструкціях Apple щодо людського інтерфейсу зазначено, що програми не повинні виходити самі. На Android це повинно працювати, і це кращий dart:io
спосіб виходу із виклику . Подумайте про подання проблеми: github.com/flutter/flutter/issues/new
Відповіді вже надані, але, будь ласка, не просто копіюйте їх, вставляючи у свою базу коду, не знаючи, що ви робите:
Якщо ви використовуєте SystemChannels.platform.invokeMethod('SystemNavigator.pop');
зауваження, що в документі чітко згадується:
Доручає системному навігатору видалити цю активність зі стеку та повернутися до попередньої.
У iOS виклики цього методу ігноруються, оскільки в інструкціях Apple щодо людського інтерфейсу зазначено, що програми не повинні виходити самі.
Можна використовувати exit(0)
. І це негайно припинить процес Dart VM із заданим кодом виходу. Але пам’ятайте, що документ говорить:
Це не чекає припинення будь-яких асинхронних операцій. Тому використання виходу дуже ймовірно втратить дані.
У будь-якому випадку доктор також зазначив SystemChannels.platform.invokeMethod('SystemNavigator.pop');
:
Цей метод слід віддавати перевагу виклику методу виходу dart: io, оскільки останній може змусити базову платформу діяти так, ніби додаток аварійно завершив роботу.
Тож, пам’ятайте, що ви робите.
Я вважаю за краще використовувати
Future.delayed(const Duration(milliseconds: 1000), () {
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
});
Хоча вихід (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. Додаток все ще працює у фоновому режимі. Тому я не впевнений, чи буде він правильно працювати на реальному пристрої.