Флаттер, как программно выйти из приложения

Как программно закрыть приложение Flutter. Я попытался выскочить единственный экран, но в результате черный экран.

Ответ 1

Ниже отлично работал со мной как на 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');

Как описано здесь

Ответ 3

Ответы уже предоставлены, но, пожалуйста, не копируйте и не вставляйте их в базу кода, не зная, что вы делаете:

Если вы используете SystemChannels.platform.invokeMethod('SystemNavigator.pop');, обратите внимание, что doc явно упоминает:

Указывает системному навигатору удалить это действие из стека и вернитесь к предыдущему действию.

На iOS вызовы этого метода игнорируются, потому что Apple человек В руководстве по интерфейсу указано, что приложения не должны выходить сами.

Вы можете использовать exit(0). И это немедленно прервет процесс Dart VM с заданным кодом выхода. Но помните, что док говорит:

Это не ожидает завершения каких-либо асинхронных операций. С помощью следовательно, выход может привести к потере данных.

В любом случае, документ также отметил SystemChannels.platform.invokeMethod('SystemNavigator.pop');:

Этот метод должен быть предпочтительнее вызова метода dart: io, так как последнее может заставить основную платформу действовать так, как если бы Приложение упало.

Итак, помните, что вы делаете.

Ответ 4

Для iOS

SystemNavigator.pop(): НЕ РАБОТАЕТ

exit(0): работает, но Apple может ПОДДЕРЖИТЬ ВАШЕ ПРИЛОЖЕНИЕ, потому что это противоречит рекомендациям Apple Human Interface для программного выхода из приложения.


Для Android

SystemNavigator.pop(): работает и является РЕКОМЕНДУЕМЫМ способом выхода из приложения.

exit(0): также работает, но он НЕ РЕКОМЕНДУЕТСЯ, поскольку он немедленно завершает процесс Dart VM, и пользователь может подумать, что приложение только что упало.