如何从 Firebase 实时数据库中检索/获取项目

Posted

技术标签:

【中文标题】如何从 Firebase 实时数据库中检索/获取项目【英文标题】:How to retrieve/fetch items from Firebase Real Time Database 【发布时间】:2020-09-14 15:31:54 【问题描述】:

我是编程新手,从Flutter开始,跟着一些教程慢慢进步。

我正在借助此 URL 在 Firebase 实时数据库 上添加数据:

最终 url = 'https://MyFirebaseLink.firebaseio.com/orders/$userId.json?auth=$authToken';

所有项目都保存在订单下>Unique-uid-Stirng>Key>字段

我可以使用此 URL 检索单个项目:

final url = 'https://MyFirebaseLink.firebaseio.com/orders/(e.g uid Sting)XYZABC123AnXYZABC.json?auth=$authToken';

我如何检索保存在不同 uid 下的所有记录尝试了这些 URL:

以下前两个 url 仅检索登录用户字段

最终网址 = 'https://MyFirebaseLink.firebaseio.com/orders.json?auth=$authToken'; 最终网址 = 'https://MyFirebaseLink.firebaseio.com/orders/.json?auth=$authToken';

寻找类似以下网址的解决方案:

最终网址 = 'https://MyFirebaseLink.firebaseio.com/orders/*.json?auth=$authToken'; 最终网址 = 'https://MyFirebaseLink.firebaseio.com/orders/*/.json?auth=$authToken';

或者是否有任何替代方法可以实现相同的效果(已编辑:仅寻找真正的数据库解决方案)。

不胜感激,谢谢。

【问题讨论】:

【参考方案1】:
final db = FirebaseDatabase.instance.reference().child("orders");
db.orderByKey().once().then((DataSnapshot snapshot)
  var uids = snapshot.value.keys;
  var data = snapshot.value;
    for (var key in uids) 
      var newList = data[key];
      print(newList);
    

以上代码解决了我作为替代方式提出的问题。

以下是以管理员用户身份获取订单以更改订单状态的完整代码:

Future<void> fetchAndSetAdminOrders() async 
List<OrderItem> orderList = [];
    final db = FirebaseDatabase.instance.reference().child("orders");
db.orderByKey().once().then((DataSnapshot snapshot)
  var uids = snapshot.value.keys;
  var data = snapshot.value;
    for (var key in uids) 
      var newList = data[key];
      print(newList);



  newList.forEach((orderId, orderData) 
    orderList.add(
      OrderItem(
        id: orderId,
        amount: orderData['amount'],
        status: orderData['status'],
        dateTime: DateTime.parse(orderData['dateTime']),
        products: (orderData['products'] as List<dynamic>)
            .map((item) => CartItem(
          id: item['id'],
          price: item['price'],
          quantity: item['quantity'],
          title: item['title'],
        ))
            .toList(),
      ),
    );

  );
    
  _orders = orderList.reversed.toList();
  notifyListeners();
);

它运行良好并显示所有订单及其状态,除了以下几个错误。

E/flutter (10256): A Orders was used after being disposed.
E/flutter (10256): Once you have called dispose() on a Orders, it can no longer be used.

【讨论】:

以上是关于如何从 Firebase 实时数据库中检索/获取项目的主要内容,如果未能解决你的问题,请参考以下文章

我如何从颤动的firebase实时数据库中检索数据

从 Firebase 实时数据库 Kotlin 中检索有序数据

如何从 Firebase 实时数据库中检索特定数据?

如何从 Firebase 实时数据库中获取数据到 Flutter 中的列表中?

无法从从 Firebase 实时数据库中检索数据以在以下代码行中使用它的方法中获取返回值 [重复]

从firebase实时数据库IOS Swift中检索数据