两个 StreamProviders 和两个 DocumentSnapshots

Posted

技术标签:

【中文标题】两个 StreamProviders 和两个 DocumentSnapshots【英文标题】:Two StreamProviders and two DocumentSnapshots 【发布时间】:2021-10-17 19:57:15 【问题描述】:

MultiProvider下有两个StreamProvider。

        StreamProvider<DocumentSnapshot>(
          create: (_) => GetUserInfoState().getUserDocSnap(),
          initialData: null,
        ),
        StreamProvider<DocumentSnapshot>(
          create: (_) => InListViewModel().stream,
          initialData: null,
        ),

如何区分这两种类型?

编辑:

      body: Consumer2<DocumentSnapshot, ProfilePageViewModel>(
          builder: (context, userInfo, model, child) 
        if (userInfo == null) 
          return CircularProgressIndicator();
         else 
          String name = userInfo.get("name");
          String city = userInfo.get("city");
          String photo = userInfo.get("photo");
          String email = userInfo.get("email");
          Timestamp signUpdate = userInfo.get("signUpdate");
          String phone = userInfo.get("phone");
          String job = userInfo.get("job");
          Timestamp birthDate = userInfo.get("birthDate");
          int level = userInfo.get("level");
          bool userverified = userInfo.get("userverified");

如果返回的类型不是 DocumentSnapshot,则 .get() 方法在这里不起作用。

【问题讨论】:

【参考方案1】:

实现这一点的最简单方法可能是使用一个普通的提供者来保存一个具有多个流的对象。 但是,您必须不使用流提供程序的功能。

Provider<StreamHolder>(
      create: (_) => StreamHolder(),
      initialData: null,
),

与对象:

class StreamHolder
      final Stream<DocumentSnapshot stream1 = GetUserInfoState().getUserDocSnap();
      final Stream<DocumentSnapshot stream2 = InListViewModel().stream;

以及使用它:

StreamBuilder<DocumentSnapshot>(
   initialData: ...,
   stream: context.read<StreamHolder>().stream1,
   builder: (context, snapshot)...,
)

如果你绝对想继续使用StreamProvider的功能,你应该创建最多两个不同的类,这样两个流不再是同一类型,但至少有一个不是Stream&lt;DocumentSnapshot&gt; .

【讨论】:

我照你说的做了。但我不能写 StreamHolder() 来创建方法。它给出了这个错误:返回类型'StreamHolder'不是'Stream',正如闭包的上下文所要求的那样。 我在帖子中添加了一些代码。我如何在那里使用它? 我已添加到我的评论中。您不能再通过此解决方案使用消费者。

以上是关于两个 StreamProviders 和两个 DocumentSnapshots的主要内容,如果未能解决你的问题,请参考以下文章

如何组合 2 个 Riverpod StreamProviders,其中 1 个流依赖于另一个流的数据?

如何对两个数据框之间的列进行 Wilcoxon 测试

比较两个向量,使其更有效

(do-while,break语句)小华的寒假作业上,有这样一个趣味填空题:给出用等号连接的两个整

lapply和do.call有什么区别?

UiPath循环活动Do While的介绍和使用