首页 > 解决方案 > 如何在颤动中有多个相同数据类型的流提供者?

问题描述

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

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

标签: flutterflutter-provider

解决方案


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

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

推荐阅读