Не удается получить отдельные записи из запроса firebase Flutter - PullRequest
0 голосов
/ 20 июня 2020

Я запрашиваю базу данных Firebase в реальном времени, и в самом запросе печать snapshot.value выводит правильные значения записей, но когда я пытаюсь преобразовать отдельные записи в Item, все значения равны нулю. ForEach l oop выдает ошибку: type '(Dynami c) => Null' не является подтипом типа '(Dynami c, Dynami c) => 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 Ответ

0 голосов
/ 21 июня 2020

Нашел проблему. Тип 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;
      });
...