在Dart中从数据库中提取数据 [英] Extracting data from Database in Dart
问题描述
我具有以下功能,该功能从Db中为每个用户提取订单数据.我的目标是打印每个用户的订单.但是,我遇到了一些奇怪的错误.
I have the following function which extracts order data from Db for each user. My goal is to print each user's orders. However, I am getting some weird errors.
功能如下:
Future<void> fetchAllOrders() async {
final url =
'https://tb-936.firebaseio.com/orders.json?auth=$authToken';
final response = await http.get(url);
final List<OrderItem> loadedOrders = [];
final extractedData = json.decode(response.body) as Map<String, dynamic>;
print('Extracted data is ' + extractedData.toString());
extractedData.forEach((userId, orderData) {
print('Order data is ' + orderData.toString());
print(orderData['amount']);
print(orderData['dateTime']);
print(orderData['deliveryMethod']);
print(orderData['uniqueOrderNumber']);
print(orderData['isOrderComplete']);
print(orderData['userId']);
});
}
以下是提取数据的控制台日志:
Here's console log for the extracted data:
{12345: {-MMqL1Tkg-XXNHbKGz62: {amount: 75000.0, dateTime: 2020-11-23T21:22:51.817939, deliveryMethod: delivery, isOrderComplete: false, products: [{id: 2020-11-23 21:22:47.023541, price: 25000.0, quantity: 3, title: Mchuzi}], uniqueOrderNumber: TBOJ43, userId: 12345}}, 67890: {-MNY9DoItO4Vo9K0EOd5: {amount: 250000.0, dateTime: 2020-12-02T14:14:12.022284, deliveryMethod: pickup, isOrderComplete: false, products: [{id: 2020-12-02 14:13:32.093068, price: 25000.0, quantity: 10, title: Mchuzi}], uniqueOrderNumber: TBQKJP, userId: 67890}}}
其中12345和67890是用户ID.
Where 12345 and 67890 are user Ids.
这是for循环中orderData的控制台日志:
Here's the console log for the orderData inside the for loop:
Order data is {-MMqL1Tkg-XXNHbKGz62: {amount: 75000.0, dateTime: 2020-11-23T21:22:51.817939, deliveryMethod: delivery, isOrderComplete: false, products: [{id: 2020-11-23 21:22:47.023541, price: 25000.0, quantity: 3, title: Mchuzi}], uniqueOrderNumber: TBOJ43, userId: 12345}}
I/flutter ( 5975): null
I/chatty ( 5975): uid=10227(com.example.tb) 1.ui identical 4 lines
I/flutter ( 5975): null
I/flutter ( 5975): Order data is {-MNY9DoItO4Vo9K0EOd5: {amount: 250000.0, dateTime: 2020-12-02T14:14:12.022284, deliveryMethod: pickup, isOrderComplete: false, products: [{id: 2020-12-02 14:13:32.093068, price: 25000.0, quantity: 10, title: Mchuzi}], uniqueOrderNumber: TBQKJP, userId: 67890}}
I/flutter ( 5975): null
I/chatty ( 5975): uid=10227(com.example.tb) 1.ui identical 4 lines
I/flutter ( 5975): null
D/Surface ( 5975): Surface::disconnect(this=0x7e78146000,api=1)
D/Surface ( 5975): Surface::disconnect(this=0x7e78146000,api=-1)
D/Surface ( 5975): Surface::disconnect(this=0x7e78033000,api=1)
为什么我会得到空值?
推荐答案
如@Adithya Shetty所述,您使用了错误的键,因为您的 orderData
实际上是只有一个属性的对象-用户 12345
的 {-MMqL1Tkg-XXNHbKGz62
和用户 67890
的 -MNY9DoItO4Vo9K0EOd5
.
As mentioned by @Adithya Shetty, you are using the wrong keys because your orderData
is actually an object that has only one property - {-MMqL1Tkg-XXNHbKGz62
for user 12345
and -MNY9DoItO4Vo9K0EOd5
for user 67890
.
要获得所需结果并动态访问它,您需要在 forEach
内添加另一个 forEach
:
To be able to achieve the result you need and access it dynamically, you need to add another forEach
inside your forEach
:
Future<void> fetchAllOrders() async {
final url =
'https://tb-936.firebaseio.com/orders.json?auth=$authToken';
final response = await http.get(url);
final List<OrderItem> loadedOrders = [];
final extractedData = json.decode(response.body) as Map<String, dynamic>;
print('Extracted data is ' + extractedData.toString());
extractedData.forEach((userId, order) {
print('User id: $userId');
order.forEach((orderKey, orderData) {
print('Order data is ' + orderData.toString());
print('Order key: $orderKey');
print(orderData['amount']);
print(orderData['dateTime']);
print(orderData['deliveryMethod']);
print(orderData['uniqueOrderNumber']);
print(orderData['isOrderComplete']);
print(orderData['userId']);
});
});
}
这篇关于在Dart中从数据库中提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!