我的代码如下:
class MyApp extends StatelessWidget {
var providers = [EmailAuthProvider()];
@override
Widget build(BuildContext context) {
if (FirebaseAuth.instance.currentUser == null) { // content depends on external variable
return SignInScreen(
providers: providers,
);
} else {
return ProfileScreen(
providers: providers,
);
}
}
}
问题是,小部件在执行操作后不会重新绘制自己:登录后,它仍然显示SignInScreen而不是ProfileScreen。
我可以用有状态的小部件包装它,并用
setState()
。
class MyApp extends StatefulWidget {
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var providers = [EmailAuthProvider()];
@override
Widget build(BuildContext context) {
if (FirebaseAuth.instance.currentUser == null) {
return SignInScreen(
providers: providers,
actions: [
AuthStateChangeAction<SignedIn>((context, state) {
setState(() {});
}),
AuthStateChangeAction<UserCreated>((context, state) {
setState(() {});
}),
],
);
} else {
return ProfileScreen(
providers: providers,
actions: [
SignedOutAction((context) {
setState(() {});
}),
],
);
}
}
}
但是有一个简单的方法吗?
我会避免使用
go_route
方法,因为我的应用程序中不需要路由。我想补充一点
signIn
小部件在那里以简单的方式。