如何从 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 实时数据库 Kotlin 中检索有序数据
如何从 Firebase 实时数据库中获取数据到 Flutter 中的列表中?