multiprovider - 将值从第一个提供者传递到第二个提供者

Posted

技术标签:

【中文标题】multiprovider - 将值从第一个提供者传递到第二个提供者【英文标题】:multiprovider - pass value from first to second provider 【发布时间】:2020-12-25 10:11:11 【问题描述】:

我正在尝试设置 MultiProvider,但我正在努力弄清楚如何将值从一个传递到另一个。我有一个包含用户 ID 的数据列表,我的应用程序之前会为用户信息创建一个 StreamProvider,然后为数据列表创建另一个。这很好,因为我可以将 user.uid 传递给数据,然后应用过滤器。像这样的...

final user = Provider.of<User>(context);

    return StreamProvider<List<UserLevelTwo>>.value(
      value: DatabaseService(uid: user.uid).levelTwoSelector,

问题是我无法在整个应用程序中访问列表,因此在研究之后,它看起来像是要与其他 Provider 一起放在 MaterialApp 之前。我已经有了这个设置,但只能手动传递 UID。

Widget build(BuildContext context) 
    return MultiProvider(
      providers: [
        StreamProvider<User>.value(value: AuthService().user),
        StreamProvider<List<UserLevelTwo>>.value(value: DatabaseService(uid: 'rgDe5I0QgFfa123mIgxo8VQew9T2').levelTwoSelector),
      ],
      child: MaterialApp(

我需要帮助的是如何将 uid 从第一个提供者传递到第二个提供者?

第二个流提供者调用我的数据库服务,如下所示:

class DatabaseService 
  final String uid;
  DatabaseService(this.uid);

  Query getLevelTwoSelectorData()
    return Firestore.instance.collection('ULTs')
        .where("UserID", isEqualTo: uid)
        .where("D", isEqualTo: false)
        .orderBy("R", descending: true)
        .orderBy("Desc");
  

  Stream<List<UserLevelTwo>> get levelTwoSelector 
    return getLevelTwoSelectorData().snapshots().map(_userLevelTwoListFromSnapshot);
  

如果有人可以帮助我,将不胜感激!

谢谢

【问题讨论】:

您在使用 Firebase 吗?另外,你能告诉我们你的 UserLevelTwo 模型代码吗? 嗨,是的,我正在使用 firebase...我已经编辑了我的原始文件以将 UserLevelTwo 信息放入...谢谢! 您不需要传递数据。只需执行此操作即可在任何 .dart 页面中获取 id:final id=FirebaseAuth.instance.currentUser.uid; 有道理,谢谢!但不幸的是,我似乎在 uid 部分遇到了错误......“没有为类型 'Future Function()' 定义 getter 'uid'。”另外,如果当前没有用户登录,在这种情况下会发生什么?感谢您的帮助! 我不知道您做了什么将类型更改为 Future。您可以检查 FirebaseAuth.instance.currentUser 是否也为空。这将告诉您用户是否已登录。如果您调用 Fireb...currentUser.uid,您将收到错误消息。 (uid was called on null) 将是错误。只需使用 if 语句来检查 Fireb...currentUser 是否不为空,如果不为空,则获取 id 【参考方案1】:

感谢您的帮助。我通过使用此处描述的相同方法来实现此功能Pass user uid to Firestore stream query in Flutter

您似乎或多或少有一个用于用户信息的 StreamProvider,然后一旦它不为空,您就可以使用原始提供者的 uid 为列表创建一个多提供者。

再次感谢!

【讨论】:

以上是关于multiprovider - 将值从第一个提供者传递到第二个提供者的主要内容,如果未能解决你的问题,请参考以下文章

通过 AsyncTask 将值从第一个活动传递到第三个活动

将值从第一个下拉列表提交到第二个下拉列表而不重新加载页面

将值从一个视图发送到另一个 ExtJS 4

如何将值从一个活动传递到上一个活动

使用列表将值从一个类传输到另一个类

如何将值从一个php页面传递到另一个? [复制]