【问题标题】:How to have multiple stream providers of the same datatype in flutter?如何在颤动中有多个相同数据类型的流提供者?
【发布时间】:2020-07-24 02:37:34
【问题描述】:

我希望有两个来自两个不同 Firebase 集合的 QuerySnapshot 类型的流提供程序。当我尝试只创建两个具有相同值的流提供者时,其中一个流提供者只是覆盖了另一个。是否有可能以某种方式区分相同数据类型的两个流提供程序?这是我当前为这两个提供商提供的代码:

  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider.value(value: FirestoreHelper.getClassCollectionReference(context).snapshots()),
        StreamProvider.value(value: FirestoreHelper.getTaskCollectionReference(context).snapshots()),
      ],
      

【问题讨论】:

    标签: flutter flutter-provider


    【解决方案1】:
    1. 将您的数据类型创建为抽象类,例如称为 国家
    2. 创建 2 个类,它们使用 country 类的 mixin 继承 ChangeNotifier
    3. 像这样使用它们:
     Provider<Country1>(
        create: (_) => Country1(),
        child: Provider<Country2>(
        create: (_) => Country2(),
        child: ...,
    

    现在您有 2 种数据类型可供使用,但实际上它们与继承的类型相同。

    【讨论】:

      【解决方案2】:

      是的,总会有办法的。您可以做的是为您的任何查询创建一个自定义类或模型类,然后将来自该查询的快照与自定义类映射。

      class MySnap {
        final QuerySnapshot snapshot;
        MySnap(this.snapshot);
      }
      

      将您的任何提供商更改为此

      StreamProvider.value(value:FirestoreHelper.getClassCollectionReference(context).snapshots().map<MySnap>((snap) => MySnap(snap)),
      

      用于访问数据用途:

      var mysnap = Provider.of<MySnap>(context);
      var data =  mysnap.snapshot;///This is your querysnapshot
      

      【讨论】:

        猜你喜欢
        • 2021-08-16
        • 2021-05-08
        • 2021-07-10
        • 2021-06-23
        • 2021-04-16
        • 1970-01-01
        • 2023-03-10
        • 2022-01-24
        • 1970-01-01
        相关资源
        最近更新 更多