在Dart中从数据库中提取数据 [英] Extracting data from Database in Dart

查看:73
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆