¿Cómo puedo cerrar programáticamente una aplicación Flutter? He intentado abrir la única pantalla, pero resulta en una pantalla negra.
¿Cómo puedo cerrar programáticamente una aplicación Flutter? He intentado abrir la única pantalla, pero resulta en una pantalla negra.
Respuestas:
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.
exit(0)
por su necesidad.
SystemNavigator.pop()
sale de mi aplicación y muestra un mensaje de bloqueo, exit(0)
funciona como se esperaba
A continuación funcionó perfectamente conmigo en ambos Android
y iOS
, 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í
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()
.
exit(0);
funciona
SystemNavigator.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 al dart:io
método de salida de la llamada . Considere presentar un problema: github.com/flutter/flutter/issues/new
Ya 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:
Indica al navegador del sistema que elimine esta actividad de la pila y vuelva a la actividad anterior.
En iOS, las llamadas a este método se ignoran porque las pautas de interfaz humana de Apple establecen que las aplicaciones no deben salir por sí mismas.
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:
Esto no espera a que finalice ninguna operación asincrónica. Por lo tanto, es muy probable que el uso de exit pierda datos.
De todos modos, el documento también señaló SystemChannels.platform.invokeMethod('SystemNavigator.pop');
:
Se debe preferir este método a llamar al método de salida de dart: io, ya que este último puede hacer que la plataforma subyacente actúe como si la aplicación se hubiera bloqueado.
Entonces, recuerda lo que estás haciendo.
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);
});
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),
),
);
}
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),
),
);
}
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.
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.