如何以编程方式关闭Flutter应用程序。 我尝试弹出唯一的“屏幕”但会导致黑屏。
提前致谢。
答案 0 :(得分:47)
以下在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年1月更新 优选的解决方案是:
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
如上所述here
答案 1 :(得分:18)
您可以使用SystemNavigator.pop()
执行此操作。
答案 2 :(得分:6)
SystemNavigator.pop()
:不起作用
exit(0)
:可以运行,但是Apple可能暂停您的应用,因为违反Apple人机界面准则以编程方式退出该应用。
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),
),
);
}