Flutter关闭App后如何保持登录状态?
How stay login after close App in Flutter?
我有一个应用程序保存在设备的本地存储中,利用 glutton: ^2.0.0 在调试模式下一切正常,但是当我编译 APK 时,我 运行 应用程序并从应用程序管理器中关闭它,当我重新运行 应用程序时,Main 方法的逻辑不起作用。
有什么想法吗?
void main() async {
//VARIABLES
String jsonDatos='';
String _defaultHome = '/loguin';
//INTENTAR
try {
//EXISTE LA VARIABLE
bool isExist = await Glutton.have('logueado');
//EXISTE LA VARIABLE
if (isExist){
//OBTENER VALOR
bool? logueado = await Glutton.vomit('logueado');
//SI NO ES NUL NI FALSE
if (logueado==null || logueado==false) {
//PAGINA DE LOGUEO
_defaultHome= '/loguin';
}else{//SI ES TRUE
//ASIGNAR VALOR
jsonDatos=await Glutton.vomit('jsdatos');
//PARSEADO DEL JSON
final dynamic clsDatosUsuario= jsonDecode(jsonDatos);
//SI TIENE COORDENADAS REGISTRADAS
if (clsDatosUsuario[0]["LATITUD"]!=""){
//PAGINA PRINCIPAL
_defaultHome= '/principal';
}else{
//PAGINA DE COORDENADAS
_defaultHome= '/terminostexto';
}
}
//SI NOEXISTE LA VARIABLE
}else{
//PAGINA DE LOGUEO
_defaultHome='/loguin';
}
} catch (error) {//SI HA CAMBIADO EL KEY
//PAGINA DE LOGUEO
_defaultHome= '/loguin';
} //SI HA CAMBIADO EL KEY
runApp(LoginUiApp(initialRoute: _defaultHome));
}
class LoginUiApp extends StatelessWidget {
final String initialRoute;
//COLORES DEL HEADER
final Color _primaryColor = HexColor('#002981');
final Color _accentColor = HexColor('#002981');
//final Color _encabezadoTabla = HexColor('#002981');
//COLOR PARA EL FOOTER
final Color _footeColor = HexColor('#D50000');
LoginUiApp({Key? key, required this.initialRoute} ) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
//MANEJO DE IDIOMAS
localizationsDelegates: const [
GlobalMaterialLocalizations.delegate
],
/*supportedLocales:const [
Locale('en'),
Locale('es')
],*/
//MANEJO DE IDIOMAS
//QUITAR DEBUB
debugShowCheckedModeBanner: false,
//RUTAS
routes: {
'/loguin': (context) => const LoginPage(),
'/terminos': (context) => const TerminosPage(),
'/terminostexto': (context) => const TerminosTextoPage(),
'/acerca': (context) => const AcercaPage(),
'/contacto': (context) => const ContactoPage(),
'/miubicacion': (context) => const MiUbicacionPage(),
'/miubicacionmapa': (context) => const MiUbicacionMapaPage(),
'/buscarfamilias': (context) => const BuscarFamiliasPage(),
'/familiasencontradasmapa': (context) => const FamiliasEncontradasMapaPage(),
'/principal': (context) => const PrincipalPage() ,
'/pagina2': (context) =>const Pagina2Page()
},
builder: OneContext().builder,
navigatorKey: OneContext().key,
title: 'CovoiturageLF',
theme: ThemeData(
primaryColor: _primaryColor,
secondaryHeaderColor: _footeColor,
scaffoldBackgroundColor: Colors.grey.shade100, colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.grey).copyWith(secondary: _accentColor),
),
initialRoute: initialRoute,
//home: const SplashPage(),
);
}
}```
将WidgetsFlutterBinding.ensureInitialized()
添加为您的主
中的第一行
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// your code
如果您想了解原因,请查看此 link
请注意 Glutton 也使用通道方法
我有一个应用程序保存在设备的本地存储中,利用 glutton: ^2.0.0 在调试模式下一切正常,但是当我编译 APK 时,我 运行 应用程序并从应用程序管理器中关闭它,当我重新运行 应用程序时,Main 方法的逻辑不起作用。
有什么想法吗?
void main() async {
//VARIABLES
String jsonDatos='';
String _defaultHome = '/loguin';
//INTENTAR
try {
//EXISTE LA VARIABLE
bool isExist = await Glutton.have('logueado');
//EXISTE LA VARIABLE
if (isExist){
//OBTENER VALOR
bool? logueado = await Glutton.vomit('logueado');
//SI NO ES NUL NI FALSE
if (logueado==null || logueado==false) {
//PAGINA DE LOGUEO
_defaultHome= '/loguin';
}else{//SI ES TRUE
//ASIGNAR VALOR
jsonDatos=await Glutton.vomit('jsdatos');
//PARSEADO DEL JSON
final dynamic clsDatosUsuario= jsonDecode(jsonDatos);
//SI TIENE COORDENADAS REGISTRADAS
if (clsDatosUsuario[0]["LATITUD"]!=""){
//PAGINA PRINCIPAL
_defaultHome= '/principal';
}else{
//PAGINA DE COORDENADAS
_defaultHome= '/terminostexto';
}
}
//SI NOEXISTE LA VARIABLE
}else{
//PAGINA DE LOGUEO
_defaultHome='/loguin';
}
} catch (error) {//SI HA CAMBIADO EL KEY
//PAGINA DE LOGUEO
_defaultHome= '/loguin';
} //SI HA CAMBIADO EL KEY
runApp(LoginUiApp(initialRoute: _defaultHome));
}
class LoginUiApp extends StatelessWidget {
final String initialRoute;
//COLORES DEL HEADER
final Color _primaryColor = HexColor('#002981');
final Color _accentColor = HexColor('#002981');
//final Color _encabezadoTabla = HexColor('#002981');
//COLOR PARA EL FOOTER
final Color _footeColor = HexColor('#D50000');
LoginUiApp({Key? key, required this.initialRoute} ) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
//MANEJO DE IDIOMAS
localizationsDelegates: const [
GlobalMaterialLocalizations.delegate
],
/*supportedLocales:const [
Locale('en'),
Locale('es')
],*/
//MANEJO DE IDIOMAS
//QUITAR DEBUB
debugShowCheckedModeBanner: false,
//RUTAS
routes: {
'/loguin': (context) => const LoginPage(),
'/terminos': (context) => const TerminosPage(),
'/terminostexto': (context) => const TerminosTextoPage(),
'/acerca': (context) => const AcercaPage(),
'/contacto': (context) => const ContactoPage(),
'/miubicacion': (context) => const MiUbicacionPage(),
'/miubicacionmapa': (context) => const MiUbicacionMapaPage(),
'/buscarfamilias': (context) => const BuscarFamiliasPage(),
'/familiasencontradasmapa': (context) => const FamiliasEncontradasMapaPage(),
'/principal': (context) => const PrincipalPage() ,
'/pagina2': (context) =>const Pagina2Page()
},
builder: OneContext().builder,
navigatorKey: OneContext().key,
title: 'CovoiturageLF',
theme: ThemeData(
primaryColor: _primaryColor,
secondaryHeaderColor: _footeColor,
scaffoldBackgroundColor: Colors.grey.shade100, colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.grey).copyWith(secondary: _accentColor),
),
initialRoute: initialRoute,
//home: const SplashPage(),
);
}
}```
将WidgetsFlutterBinding.ensureInitialized()
添加为您的主
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// your code
如果您想了解原因,请查看此 link
请注意 Glutton 也使用通道方法