Flutter 应用程序 Multi Provider 和相互依赖的 Stream Providers
Posted
技术标签:
【中文标题】Flutter 应用程序 Multi Provider 和相互依赖的 Stream Providers【英文标题】:Flutter app MultiProvider with StreamProviders that depends on eachother 【发布时间】:2020-11-15 06:25:41 【问题描述】:在我的应用程序中,我在整个应用程序(整个 MaterialApp 上)上使用了一个 StreamProvider,它提供了用户的状态(无论他是否登录,如果他登录,他就是 uid)。我想为整个 MaterialApp 提供来自 Firebase 的实时 UserData,因此我需要在包装整个 MaterialApp 的 MultiProvider 中使用 StreamProvider。但问题是要从Firebase获取UserData,我需要获取用户的uid,所以我不能使用用户状态和uid的StreamProviders以及提供UserData的那个。 我的代码如下所示:
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 中使用它来获取用户数据?
【问题讨论】:
使用 ProxyProvider 【参考方案1】:我尝试了两种逻辑。在第一种模式的情况下,不幸的是我可以在 Tabs 类中获得“UserData”。但是第二种模式,效果很好。
/// 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()
);
)
);
【讨论】:
对不起我的粗鲁类型。我更正了我的代码。以上是关于Flutter 应用程序 Multi Provider 和相互依赖的 Stream Providers的主要内容,如果未能解决你的问题,请参考以下文章
我在颤振中正确运行 multi_select_flutter 小部件时遇到问题
Flutter 无法上传从 multi_image_picker 获取的多张图片
如何在 Flutter 中使用 Dio 和 multi_image_picker 插件上传多张图片