web-dev-qa-db-fra.com

Flutter comment quitter l'application par programme

Comment puis-je fermer par programme une application Flutter. J'ai essayé de faire apparaître le seul écran, mais il en résulte un écran noir.

37
Theo Bouwman

Ci-dessous a parfaitement fonctionné avec moi dans Android et iOS, j'ai utilisé exit(0) de 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),
          ), 
    );
  }

UPDATE Jan 2019 La solution préférable est:

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

Comme décrit ici

58
Hasan A Yousef

Vous pouvez le faire avec SystemNavigator.pop() .

20
Collin Jackson

Les réponses sont déjà fournies mais s'il vous plaît, ne les copiez pas simplement dans votre base de code sans savoir ce que vous faites:

Si vous utilisez SystemChannels.platform.invokeMethod('SystemNavigator.pop');, notez que doc mentionne clairement:

Indique au navigateur système de supprimer cette activité de la pile et de revenir à l'activité précédente.

Sur iOS, les appels à cette méthode sont ignorés car les directives d'interface utilisateur d'Apple stipulent que les applications ne doivent pas se fermer.

Vous pouvez utiliser exit(0). Et cela mettra fin au processus Dart VM) immédiatement avec le code de sortie donné. Mais rappelez-vous que doc dit:

Cela n'attend pas que des opérations asynchrones soient terminées. Utiliser exit est donc très susceptible de perdre des données.

Quoi qu'il en soit, le doc a également noté SystemChannels.platform.invokeMethod('SystemNavigator.pop');:

Cette méthode doit être préférée à l'appel de la méthode de sortie de Dart: io, cette dernière pouvant amener la plate-forme sous-jacente à agir comme si l'application s'était écrasée.

Alors, gardez à l'esprit ce que vous faites.

7
Blasanka

Pour iOS

SystemNavigator.pop(): Est-ce que ne fonctionne pas

exit(0): fonctionne mais Apple peut suspendre votre application car il est contre Apple = Directives d'interface humaine pour quitter l'application par programme.


Pour Android

SystemNavigator.pop(): Fonctionne et constitue le RECOMMANDÉ moyen de quitter l'application.

exit(0): fonctionne également mais NON RECOMMANDÉ car il termine le processus de fléchette VM immédiatement et l'utilisateur peut penser que l'application vient de tomber en panne.

2
CopsOnRoad