Flutter应用程序MultiProvider与StreamProviders相互依赖



在我的应用程序中,我在整个应用程序上(在整个MaterialApp上(使用StreamProvider,它提供用户的状态(无论他是否登录,如果他已登录,则为uid(。我想为整个MaterialApp提供Firebase的实时UserData,所以我需要在包装整个MaterialApp的MultiProvider中使用StreamProvider。但问题是,要从Firebase获取UserData,我需要获取用户的uid,所以我不能使用用户状态和uid的StreamProviders以及提供UserData的StreamProviders。我的代码如下:

MultiProvider(
providers: [
StreamProvider.value(
value: AuthService().getUser(),
),
StreamProvider<UserData>.value(
value: DatabaseRepository(uid: HERE I NEED THE UID FROM THE PREVIOUS PROVIDER).getUserDataStream(),
child: Tabs(),
catchError: (ctx, e) {
print('error: $e');
return UserData(
uid: null,
username: null,
email: null,
);
},
),
],

我应该怎么做才能从第一个StreamProvider获取uid,并在第二个StreamProvider中使用它来获取用户数据?

我尝试了两种逻辑。在第一种模式的情况下,不幸的是,我可以得到";用户数据";在Tabs类中。但第二种模式,效果很好。

/// 1st Pattern
MultiProvider(
providers: [
StreamProvider<User>.value(value: AuthService().getUser(),),
ProxyProvider<User, StreamProvider<UserData>>(
update: (context, value, previous) {
return StreamProvider<UserData>.value(value: 
DatabaseRepository(uid:User.uid).getUserDataStream(),);
}
)
],
child: Tabs(),
);
/// 2nd Pattern
MultiProvider(
providers: [
StreamProvider<User>.value(value: AuthService().getUser(),),
],
child: Builder(
builder: (context) {
final user = Provider.of<User>(context);
return MultiProvider(
providers: [
StreamProvider<UserData>.value(value: 
DatabaseRepository(uid:user.uid).getUserDataStream(),)
],
child: Tabs()
); 
}
)
);

最新更新