小编Cod*_*vid的帖子

在 Flutter 中监听 Firestore 集合及其子集合

我试图达到的结果

我使用 Firestore 服务器作为餐厅订单系统 Flutter 应用程序的后端。我发现自己在实现显示数据库实时更改的屏幕时遇到了挑战。

Firestore DB中的结构如下: Firestore DB 中的结构

所以我有一个名为“tables”的集合,其中包含多个文档(不同的餐厅可能有不同的名称)。每个文档都有几个字段,例如“checkinTime”。此外,每个表文档还具有订单集合(“子集合”)。

我想Stream在我的 Flutter 屏幕上看到一个接收所有表格的屏幕,包括他们的订单。屏幕应该给出所有表格的概述,这意味着它应该在任何时候更新......

  • 创建了一个新的表格文档
  • 更新了表格文档
  • 新订单被放入表子集合“orders”中
  • 订单文件已更新

Order我有和类的模型Table。Table 类的实例应该有一个List<Order> _orders包含子集合中存储的所有订单的 。应该Stream为我提供List<Table>.

注意:我尝试使用 Flutter Web 来实现这一点,但这对于解决我的问题可能没有什么影响。

现在的进展

到目前为止,我实际上已经几乎解决了这个挑战。我已经设法将Stream所有表格显示到屏幕上。

在大多数情况下,它最初会成功加载数据。有时,第一次加载屏幕会导致无限加载 CircularProgressIndicator 并且未加载数据。

当另一个表添加到集合中时,屏幕会更新。添加订单不会立即起作用,但如果我再次重新加载页面或在将另一个订单添加到订单子集合后,它就会起作用。似乎错误的发生与时间无关。

更新订单文档似乎根本不起作用/重新加载订单状态。

任何情况下都不会出现错误消息。

当前代码

TableInfo流类:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart' as m;

import '../../../../../domain/infrastructure/firestore_infrastructure.dart';
import '../../../../../domain/models/orders_models/order.dart';
import '../../../../../domain/models/orders_models/table.dart';
import '../../../../../locator.dart';

///Class for getting all tables and orders in realtime and managing the current filter settings.
class TableInfo extends …
Run Code Online (Sandbox Code Playgroud)

dart firebase flutter google-cloud-firestore flutter-layout

5
推荐指数
1
解决办法
2570
查看次数