也许,你可以做到这一点。假设您有一个带有异步方法的 Auth 类isLogged
.
class Auth {
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
Future<bool> isLogged() async {
try {
final FirebaseUser user = await _firebaseAuth.currentUser();
return user != null;
} catch (e) {
return false;
}
}
}
你可以使用myApp
构造函数传递initialRoute
,并根据登录状态决定初始路由。然后,您可以传递以下实例myApp
to runApp
:
Warning:如果出现错误,请添加WidgetsFlutterBinding.ensureInitialized();
就在之前void main() async {
。检查这个问题#40253 https://github.com/flutter/flutter/issues/40253.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final Auth _auth = Auth();
final bool isLogged = await _auth.isLogged();
final MyApp myApp = MyApp(
initialRoute: isLogged ? '/home' : '/',
);
runApp(myApp);
}
之后,您必须修改myApp
类在构造函数中传递初始路由:
class MyApp extends StatelessWidget {
final String initialRoute;
MyApp({this.initialRoute});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Dynamic Route Demo',
initialRoute: initialRoute,
routes: {
'/': (context) => LoginPage(),
'/home': (context) => HomePage(),
'/settings': (context) => SettingsPage(),
},
);
}
}
希望这可以帮助。