如何从嵌套集合Flutter / Firebase获取Stream <QuerySnapshot>

时间:2019-12-26 11:01:31

标签: firebase flutter dart google-cloud-platform

我想提供给StreamProvider.value我的Firestore中的嵌套集合的快照。

我在Firestore中具有以下结构:

  • 根:
    • 用户(集合)
      • User1(带字段的文档)
      • User2(带字段的文档)
    • 订单(托收)
      • Order1(带字段的文档)
        • 产品(合集)
          • 膳食1(带字段的文档)
          • 餐2(带字段的文档)
        • 日期

我想获取指定订单的产品流,因为我只想通知该订单我的应用更改。

这是我当前的代码(我每天有一个订单,我希望获得当天订单的产品流):

class DatabaseService {

  final CollectionReference _collOrders =
      Firestore.instance.collection("orders");

  Future<DocumentSnapshot> _getTodayOrder(DateTime date) async {
    QuerySnapshot lastOrder = await _collOrders.getDocuments();
    for (DocumentSnapshot orderData in lastOrder.documents) {
      var dateOrder = DateTime.parse(orderData.data["Date"]);
      int diffDays = date.difference(dateOrder).inDays;
      if (diffDays == 0) 
      { 
        return orderData ;
      }
    }
  }

  Stream<QuerySnapshot> getStreamOrdersByDay(DateTime date) {
    _getTodayOrder(date).then((value) {
      return value.reference.collection("Products").snapshots();
    });
  }
}

在我的主页中:

...

@override
  Widget build(BuildContext context) { 
    return StreamProvider<QuerySnapshot>.value(
      value: DatabaseService().getStreamOrdersByDay(DateTime.now()),
      child: Scaffold(
        appBar: AppBar(title: Text("APiZZa")),
        body: Container(...)
...

但是当我打电话时:

final orders = Provider.of<QuerySnapshot>(context);

在子窗口小部件中,“ orders”为空。我认为Flutter无需等待_getTodayOrder完成即可构建主页。您建议做什么?

0 个答案:

没有答案