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 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
推荐阅读
- sql - 我需要从 oracle 中的另一个 table2 创建一个 oracle table1。我需要在其中插入数据作为 table2 的列名。例子
- reactjs - React Router 中的队列页面转换
- node.js - pouchdb-adapter-leveldb 在 leveldown.js 中显示错误
- python - 熊猫堆积条形图问题
- mysql - 按数据库计算的内容分组
- php - 在 CakePHP 中使用 MySQL 多边形字段
- sql-server - SQL Server 对列数据透视
- slack - 如何添加 Slack 消息按钮以打开与用户的直接聊天?
- r - 修复 sommer 的 mmer2 中的方差分量?
- javascript - 如果值为 false 或 true,则禁用和激活按键