如何在 flutter 中拥有多个相同数据类型的流提供者?
How to have multiple stream providers of the same datatype in flutter?
我想要两个来自两个不同 Firebase 集合的 QuerySnapshot 类型的流提供程序。当我尝试只制作两个具有相同值的流提供者时,其中一个流提供者只是覆盖了另一个。是否有可能以某种方式区分相同数据类型的两个流提供者?这是我当前的两个提供商代码:
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider.value(value: FirestoreHelper.getClassCollectionReference(context).snapshots()),
StreamProvider.value(value: FirestoreHelper.getTaskCollectionReference(context).snapshots()),
],
是的,总有办法。您可以做的是为您的任何查询创建自定义 class 或模型 class,然后使用自定义 class.
映射来自该查询的快照
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
- 将您的数据类型创建为抽象 class,例如称为
国家
- 创建 2 个 classes 并且它们从国家 class
继承 ChangeNotifier 和 mixin
- 像这样使用它们:
Provider<Country1>(
create: (_) => Country1(),
child: Provider<Country2>(
create: (_) => Country2(),
child: ...,
现在您可以使用 2 种数据类型,但实际上它们是继承的相同类型。
我想要两个来自两个不同 Firebase 集合的 QuerySnapshot 类型的流提供程序。当我尝试只制作两个具有相同值的流提供者时,其中一个流提供者只是覆盖了另一个。是否有可能以某种方式区分相同数据类型的两个流提供者?这是我当前的两个提供商代码:
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider.value(value: FirestoreHelper.getClassCollectionReference(context).snapshots()),
StreamProvider.value(value: FirestoreHelper.getTaskCollectionReference(context).snapshots()),
],
是的,总有办法。您可以做的是为您的任何查询创建自定义 class 或模型 class,然后使用自定义 class.
映射来自该查询的快照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
- 将您的数据类型创建为抽象 class,例如称为 国家
- 创建 2 个 classes 并且它们从国家 class 继承 ChangeNotifier 和 mixin
- 像这样使用它们:
Provider<Country1>( create: (_) => Country1(), child: Provider<Country2>( create: (_) => Country2(), child: ...,
现在您可以使用 2 种数据类型,但实际上它们是继承的相同类型。