gpt4 book ai didi

flutter 提供程序 : Provide 2 streams with one dependent on the other

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

我正在使用提供程序包。在小部件树的根部,我有一个 multiprovider:

Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<FirebaseUser>.value(
value: FirebaseConnection.getAuthenticationStream()),
StreamProvider<User>.value(
value: FirebaseConnection.getUserStream(uid: ???))
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
initialRoute: LoginScreen.id,
onGenerateRoute: RouteGenerator.generateRoute,
),
);
}

第一个 StreamProvider 提供来自 firebase_auth 的登录用户。
第二个 StreamProvider 应该向该用户提供附加信息(存储在 users 集合中)。
问题是要获得第二个流,我需要第一个流提供的 FirebaseUser 的 uid,但我不知道如何访问它。

嵌套 StreamProviders 不起作用,因为在第二个流中我只能访问构建方法的(错误)上下文(对于 Provider.of(context))

最佳答案

解决方案是将第二个流 (loggedInUserStream) 保存在状态中,并在第一个流 (authenticationStream) 发出新值(通过监听它)时更改它,如下面的代码所示:

class _FloatState extends State<Float> {
StreamSubscription<FirebaseUser> authenticationStreamSubscription;
Stream<User> loggedInUserStream;

StreamSubscription<FirebaseUser> setLoggedInUserStream() {
authenticationStreamSubscription =
FirebaseConnection.getAuthenticationStream().listen((firebaseUser) {
loggedInUserStream =
FirebaseConnection.getUserStream(uid: firebaseUser?.uid);
});
}

@override
void initState() {
super.initState();
authenticationStreamSubscription = setLoggedInUserStream();
}

@override
void dispose() {
super.dispose();
authenticationStreamSubscription.cancel();
}

@override
Widget build(BuildContext context) {
return StreamProvider<User>.value(
value: loggedInUserStream,
child: MaterialApp(
debugShowCheckedModeBanner: false,
initialRoute: LoginScreen.id,
onGenerateRoute: RouteGenerator.generateRoute,
),
);
}
}

我只需要第一个流 (authenticationStream) 来获取第二个 (loggedInUserStream),所以我没有将它提供给下面的小部件。

关于 flutter 提供程序 : Provide 2 streams with one dependent on the other,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59569333/

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