Flutter中如何强制重绘无状态Widget?登录状态切换场景
Flutter 登录状态变更后Widget不重绘的简化实现方案
我写了一个无状态Widget,用来根据Firebase Auth的用户状态切换登录页和个人资料页:
class MyApp extends StatelessWidget { var providers = [EmailAuthProvider()]; @override Widget build(BuildContext context) { if (FirebaseAuth.instance.currentUser == null) { // 内容依赖外部状态变量 return SignInScreen( providers: providers, ); } else { return ProfileScreen( providers: providers, ); } } }
但遇到一个问题:完成登录操作后,Widget不会自动重绘,仍然停留在SignInScreen,不会切换到ProfileScreen。
我目前的解决方法是把组件改成有状态Widget,通过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这类路由方案,因为我的应用不需要路由,只想用最简单的方式集成登录组件。
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

