无法从 firebase 查询 Flutter 中获取单个记录

Posted

技术标签:

【中文标题】无法从 firebase 查询 Flutter 中获取单个记录【英文标题】:Can't get hold of single records from firebase query Flutter 【发布时间】:2020-10-10 17:45:58 【问题描述】:

我正在查询 Firebase 实时数据库,并且在查询本身中打印 snapshot.value 会打印正确的条目值,但是当我尝试将单个记录转换为 Item 时,所有值都为空。 forEach 循环抛出错误: type '(dynamic) => Null' 不是 '(dynamic, dynamic) => void' of 'f' 的子类型 你能看出我做错了什么吗?

await _databaseReference
          .child('Continent')
          .child('Europe')
          .child('Country')
          .child(countryDb)
          .child('Region')
          .child(regionDb)
          .child('City')
          .child(cityDb)
          .child('Catalog')
          .orderByChild('Product Category')
          .equalTo(query)
          .once()
          .then((snapshot) 
        print(
            ' local db result is $snapshot, value is $snapshot.value, item is $Item.fromFirebase(snapshot.value).toMap().toString()'); //item's values are null

        snapshot.value.forEach((childSnapshot) 
//          results.add(Item.fromFirebase(childSnapshot));
//          print('childSnapshot is : $Item.fromFirebase(childSnapshot)');
          print('childSnapshot is : $childSnapshot');
        );
        return;
      );

Item.fromFirebase:

static Item fromFirebase(Map<dynamic, dynamic> map) 
    return Item(
        itemId: map['Product Id'],
        brand: map['Brand'],
        itemName: map['Product Name'],
        category: map['Product Category'],
        price: map['Product Price'],
        description: map['Product Description'],
        vendor: map['Product Vendor'],
        code: map['Code'],
        isPromotion: map['isPromotion'],
        imageUrl: map['Product Picture Url']);
  

【问题讨论】:

【参考方案1】:

发现问题。 foreach 类型错误。由于值类型是 Map,只传入一个值与类型不匹配。

传入 2 个值,它确实按预期工作。

await _databaseReference
          .child('Continent')
          .child('Europe')
          .child('Country')
          .child(countryDb)
          .child('Region')
          .child(regionDb)
          .child('City')
          .child(cityDb)
          .child('Catalog')
          .orderByChild('Product Category')
          .equalTo(query)
          .once()
          .then((snapshot) 
        print(' local db result is $snapshot, value is $snapshot.value');

        snapshot.value.forEach((key, childSnapshot) 
          print('childSnapshot is : $childSnapshot');
          print(
              'childSnapshot is : $Item.fromFirebase(childSnapshot).toMap().toString()');
          results.add(Item.fromFirebase(childSnapshot));
        );
        return;
      );

【讨论】:

以上是关于无法从 firebase 查询 Flutter 中获取单个记录的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Flutter 中的 Firebase Firestore 返回列表

Flutter Firebase异步查询未在流函数中检索数据

无法从Firebase数据库中读取数据 - Flutter

Flutter:无法从 firebase 读取数据。方法 '[]' 在 null 错误上被调用

Flutter - 从特定值中删除数据,Firebase 实时数据库 [重复]

无法使用 Flutter Image Network 从 Firebase 存储加载图像