gpt4 book ai didi

flutter - 导航后流构建器未更新

转载 作者:行者123 更新时间:2023-12-03 04:40:32 26 4
gpt4 key购买 nike

我正在使用流构建器来检测用户是否登录。

 return StreamBuilder<User>(
stream: AuthService().user,
builder: (context, snapshot) {
if (snapshot.hasData)
return SectionWrapper();
else
return Authentication();
});
这是我正在使用的流
 Stream<User> get user {
return _auth.onAuthStateChanged.map(_userFromFirebaseUser);
}
//create user object based on firebase user
User _userFromFirebaseUser(FirebaseUser user) {
return user != null ? User(uid: user.uid, email: user.email) : null;
}
在部分包装器中,有 2 个按钮导航到应用程序的两个不同部分,当我在其中一个部分中使用注销方法时,流构建器不会更新,它需要刷新才能更新状态。
我还尝试在部分包装器中放置一个按钮以退出,它可以在我导航到其中一个部分之前工作并更新用户界面。
这是 sectionWrapper() 小部件树。
Column(
children: <Widget>[
CupertinoButton(
child: Text('Donation & Selling Section'),
onPressed: () {
Navigator.pushReplacementNamed(
context, Section1.routeName,
arguments: user);
}),
CupertinoButton(
child: Text('Bookstores Section'),
onPressed: () {
Navigator.pushReplacementNamed(
context, Section2.routeName);
}),

//works before navigation, does not work after navigation back here
CupertinoButton(
child: Text('Sign out'),
onPressed: () async {
await AuthService().signOut();
}),
],
),
我还尝试将流提供程序与消费者一起使用,但最终还是遇到了同样的问题。
   class Wrapper extends StatelessWidget {
static const String routeName = '/';

@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return user == null ? Authentication() : SectionWrapper();
}
}
我用流提供程序包装了 Material 应用程序。
MultiProvider(
providers: [
StreamProvider<User>.value(value: AuthService().user),
//other providers
],
child: MaterialApp(

最佳答案

您的条件未在子页面中进行测试。您应该在 sectionWrapper() 页面中调用 Provider.of。
你说:

  • 如果用户已登录,则构建 sectionWrapper 小部件
  • 如果用户未登录构建身份验证小部件。

  • 这就是那个构建方法。构建完成后,您需要说明下一步要做什么。
    例如。
    在下一个屏幕上,在您的小部件树上方,像您一样设置 provider.of。然后,如果值发生变化,provider 将强制重建该屏幕的构建方法。

    关于flutter - 导航后流构建器未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63338282/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com