gpt4 book ai didi

flutter - Stream Provider 使用自定义模型类监听 firestore 实时变化

转载 作者:行者123 更新时间:2023-12-03 04:21:07 24 4
gpt4 key购买 nike

几乎所有关于使用模型类的流提供程序的示例都通过调用模型类的方法来更新数据,该模型类将 StreamController.sink 包含为更新后的值(如递增的整数)。然后使用 Provider.of(context) 通过 UI 中的一些 onPressed 事件调用此方法。难道不能通过ChangeNotifier来实现吗?这样的实现如何监听实时变化,比如在 Firestore 集合 查询快照流中?

我尝试直接使用,收听 firestore 流,

StreamProvider<QuerySnapshot>.value(      
value: Firestore.instance.collection('orders/' + _auth.userID + '/orders').snapshots(),
child: UIMain())

但我不想直接使用这个流。我希望使用我自己的模型类创建一个自定义流,它可以实时提供该集合中所有文档的名称,根据该集合中的文档 ID 查询另一个集合,并将该数据也作为流提供,而无需按下每次一个按钮。

我希望有人能对此提供帮助。

最佳答案

您可以创建自己的服务和映射器来实现所需的解决方案 -

首先模态你的数据

产品. Dart

class Order {
String id;
String price;
String name;

Order({this.id, this.price, this.name,});

factory Order.fromMap(Map snapshot,String id){
id = id ?? '',
price = snapshot['price'] ?? '',
name = snapshot['name'] ?? '',
}

toJson() {
return {
"price": price,
"name": name,
};
}
}

然后创建您的数据库服务,该服务将从 Firestore 获取数据并相应地映射它。

order_service.dart

import 'package:model/order.dart';

class OrderService extends ChangeNotifier {
final Firestore _db = Firestore.instance;


Stream<List<Order>> fetchOrders(String merchID) {
return _db.collection('merchants/' + merchID + '/orders').snapshots().map(
(snapShot) => snapShot.documents
.map(
(document) => Order.fromMap(document.data, document.documentID))
.toList());
}
}

然后您可以相应地在 StreamProvider 小部件中使用此自定义 OrderService。

希望这对您有所帮助!

关于flutter - Stream Provider 使用自定义模型类监听 firestore 实时变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62557750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com