Flutterアプリケーションをプログラムで閉じるにはどうすればよいですか?唯一の画面をポップしようとしましたが、画面が真っ暗になります。
回答:
SystemNavigator.pop()
:動作しません
exit(0)
:作品AppleはありYOUR APPをSUSPENDそれはプログラムでアプリを終了するには、Appleのヒューマンインターフェイスガイドラインに反対だから。
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年1月の更新 好ましい解決策は次のとおりです。
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)
。これにより、指定された終了コードでDartVMプロセスがすぐに終了します。しかし、ドキュメントが言うことを覚えておいてください:
これは、非同期操作が終了するのを待ちません。したがって、exitを使用すると、データが失われる可能性が非常に高くなります。
とにかく、ドキュメントもメモしましたSystemChannels.platform.invokeMethod('SystemNavigator.pop');
:
このメソッドは、dart:ioのexitメソッドを呼び出すよりも優先する必要があります。後者の場合、基盤となるプラットフォームがアプリケーションがクラッシュしたかのように動作する可能性があるためです。
だから、あなたがしていることを覚えておいてください。
私は使用することを好む
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エミュレータで動作していないようです。アプリはまだバックグラウンドで動作しています。そのため、実際のデバイスで正しく機能するかどうかはわかりません。