¿Cómo puedo cerrar programáticamente una aplicación Flutter? He intentado abrir la única pantalla, pero resulta en una pantalla negra.
103
SystemNavigator.pop()
: NO FUNCIONA
exit(0)
: Funciona, pero Apple puede SUSPENDER SU APLICACIÓN porque es contrario a las pautas de la Interfaz humana de Apple salir de la aplicación mediante programación.
SystemNavigator.pop()
: Funciona y es la forma RECOMENDADA de salir de la aplicación.
exit(0)
: También funciona, pero NO SE RECOMIENDA ya que finaliza el proceso de Dart VM inmediatamente y el usuario puede pensar que la aplicación acaba de fallar.
SystemNavigator.pop()
no funciona con el emulador de Android. La aplicación aún funciona en segundo plano. Así que no estoy seguro de si funcionará correctamente en un dispositivo real.exit(0)
por su necesidad.SystemNavigator.pop()
sale de mi aplicación y muestra un mensaje de bloqueo,exit(0)
funciona como se esperabaA continuación funcionó perfectamente conmigo en ambos
Android
yiOS
, uséexit(0)
dedart: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), ), ); }
ACTUALIZACIÓN Enero de 2019 La solución preferible es:
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
Como se describe aquí
fuente
t work for me... I
tratando de agregar un botón de salida a CupertinoTabScafold. Con () => exit (0), da una pantalla en blanco con barra de pestañas.Puedes hacer esto con
SystemNavigator.pop()
.fuente
exit(0);
funcionaSystemNavigator.pop
se ignora porque las pautas de interfaz humana de Apple establecen que las aplicaciones no deben salir por sí mismas. En Android, debería funcionar y se prefiere aldart:io
método de salida de la llamada . Considere presentar un problema: github.com/flutter/flutter/issues/newYa se proporcionan respuestas, pero no se limite a copiar y pegarlas en su base de código sin saber lo que está haciendo:
Si usa,
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
tenga en cuenta que el documento menciona claramente:Puede utilizar
exit(0)
. Y eso terminará el proceso de Dart VM inmediatamente con el código de salida dado. Pero recuerda que el doc dice:De todos modos, el documento también señaló
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
:Entonces, recuerda lo que estás haciendo.
fuente
Prefiero usar
Future.delayed(const Duration(milliseconds: 1000), () { SystemChannels.platform.invokeMethod('SystemNavigator.pop'); });
Aunque, exit (0) también funciona pero la aplicación se cierra abruptamente y no se ve bien, parece que la aplicación se ha bloqueado.
Future.delayed(const Duration(milliseconds: 1000), () { exit(0); });
fuente
Esto funcionó para mí;
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), ), ); }
fuente
A continuación funcionó perfectamente conmigo en la importación de Android e 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), ), ); }
fuente
SystemNavigator.pop()
no funciona en iOS, lea mi respuesta. No hay forma de salir en la aplicación de iOS al menos a partir de hoy.