以编程方式关闭应用程序

时间:2017-07-14 18:29:26

标签: flutter

如何以编程方式关闭Flutter应用程序。 我尝试弹出唯一的“屏幕”但会导致黑屏。

提前致谢。

11 个答案:

答案 0 :(得分:47)

以下在AndroidiOS中与我完美配合,我使用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年1月更新 优选的解决方案是:

SystemChannels.platform.invokeMethod('SystemNavigator.pop');

如上所述here

答案 1 :(得分:18)

您可以使用SystemNavigator.pop()执行此操作。

答案 2 :(得分:6)

对于iOS

SystemNavigator.pop() 不起作用

exit(0) :可以运行,但是Apple可能暂停您的应用,因为违反Apple人机界面准则以编程方式退出该应用。


对于Android

SystemNavigator.pop() :有效,并且是退出应用程序的推荐方式。

exit(0) :也可以,但是不推荐,因为它立即终止了Dart VM进程,用户可能认为该应用程序刚刚崩溃。

答案 3 :(得分:6)

我更喜欢使用

 Future.delayed(const Duration(milliseconds: 1000), () {
        SystemChannels.platform.invokeMethod('SystemNavigator.pop');
      });

尽管exit(0)也可以工作,但是该应用突然关闭并且看起来不太好,似乎该应用已崩溃。

 Future.delayed(const Duration(milliseconds: 1000), () {
       exit(0);
      });

答案 4 :(得分:6)

到目前为止,我看到的唯一解决方案是:

安卓:

SystemChannels.platform.invokeMethod('SystemNavigator.pop');

iOS:

无法关闭应用程序,但您可以使用 https://pub.dev/packages/minimize_app 将其移至后台,例如:

MinimizeApp.minimizeApp();

享受吧!

答案 5 :(得分:2)

已经提供了答案,但是请不要只是将其复制粘贴到您的代码库中,而不知道您在做什么:

如果您使用SystemChannels.platform.invokeMethod('SystemNavigator.pop');,请注意doc明确提到:

  

指示系统导航器从堆栈中删除此活动   然后返回上一个活动。

     

在iOS上,对此方法的调用将被忽略,因为苹果的人工   接口准则指出应用程序不应退出   自己。

您可以使用exit(0)。这将立即使用给定的退出代码终止Dart VM进程。但是请记住,doc说:

  

这不等待任何异步操作终止。使用   因此退出很可能会丢失数据。

无论如何,doc也注意到了SystemChannels.platform.invokeMethod('SystemNavigator.pop');

  

与调用dart:io的exit方法相比,应首选此方法,因为   后者可能会导致基础平台像   应用程序崩溃了。

所以,请记住您在做什么。

答案 6 :(得分:2)

这对我有用;

SELECT 
COUNT(DISTINCT A.id) table1,
COUNT(DISTINCT B.id) table2,
COUNT(DISTINCT C.id) table3,
COUNT(DISTINCT D.id) table4
FROM table1 A
LEFT JOIN table2 B
ON A.id = B.id

LEFT JOIN table3 C
ON A.id = C.id

LEFT JOIN table4 D
ON A.id = D.id

答案 7 :(得分:0)

您可以通过检查平台相关条件来调用它。对于Android和ios,在点击时执行不同的操作。

    import 'dart:io' show Platform;
    import 'package:flutter/services.dart';

           

           RaisedButton(
                onPressed: () {
                  if (Platform.isAndroid) {
                    SystemNavigator.pop();
                  } else if (Platform.isIOS) {
                    exit(0);
                  }
                },
              child: Text("close app"),
            )

答案 8 :(得分:0)

我正在调用_getOutOfApp函数,这不是包;

    void _getOutOfApp {

      if (Platform.isIOS) {

        try {
          exit(0); 
        } catch (e) {
          SystemNavigator.pop(); // for IOS, not true this, you can make comment this :)
        }

      } else {

        try {
          SystemNavigator.pop(); // sometimes it cant exit app  
        } catch (e) {
          exit(0); // so i am giving crash to app ... sad :(
        }

      }
    }

答案 9 :(得分:0)

这对我有用。创建一个函数,并在您的 onPressed 函数中调用此函数。由于 Apple 不建议将 exit(0) 用于 iOS 应用程序,因此我在此处选择了此库:https://pub.dev/packages/minimize_app。 下面是代码片段:

void closeApp(){
   if(Platform.isAndroid){
       SystemChannels.platform.invokeMethod('SystemNavigator.pop');            
   }else{
       MinimizeApp.minimizeApp();
   }
}

答案 10 :(得分:-2)

以下与Android完美搭配 导入'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),
          ), 
    );
  }