Как разобрать документ из моей базы данных Firestore - PullRequest
0 голосов
/ 11 января 2019

Как я могу разобрать данные из моего Firestore. Мой документ выглядит так: Produkte is an array. The Array includes maps with a String and a Number

с этим кодом я получаю свои данные.

StreamBuilder(
            stream: Firestore.instance.collection("Benutzer").document("Anton").collection("Einkaufsliste").snapshots(),
            builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
              return ListView.builder(
                itemCount: snapshot.data.documents.length,
                itemBuilder: (context, index){
                  return  ExpansionTile(
                    title: Text(snapshot.data.documents[index].documentID),
                    children: buildCheckBoxListTile(index, snapshot),

в функции buildCheckBoxListTile(index, snapshot) Я хотел получить данные с карт. Итак, как мне разобрать эти данные?

Спасибо за помощь.

Edit: Я создал класс Produkte:

class Produkte{
  Produkte({this.produktList});

  List<Produkt> produktList;

  factory Produkte.fromJson(Map<String, dynamic> parsedJson){
    var list = parsedJson["Produkte"] as List;
    List<Produkt> products = list.map((i) => Produkt.fromJson(i)).toList();

    return Produkte(
      produktList: products,
    );
  }
}

А класса Продукт:

class Produkt{
  Produkt({this.name, this.anzahl});

  String name;
  int anzahl;

  factory Produkt.fromJson(Map<String, dynamic> parsedJson){
    return Produkt(
      name: parsedJson["Name"],
      anzahl: parsedJson["Anzahl"]
    );
  }
}

Теперь, когда я звоню так: Produkte Hans = Produkte.fromJson(snapshot.data.documents[index].data); Следующее Исключение брошено: I/flutter (18038): Another exception was thrown: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'

1 Ответ

0 голосов
/ 12 января 2019

У меня была такая же проблема. Я использую пакет json_serializable для автоматической генерации.

Для меня это помогло, удалить типы бросков с карты

  factory Produkt.fromJson(Map parsedJson)

и допускается любая карта на аннотации

@JsonSerializable(anyMap: true)

При обсуждении этой темы возникла проблема в хранилище флаттера . HerrNiklasRaab также опубликовал другой обходной путь:

  factory Chat.fromJson(Map<String, dynamic> json) {
    json["members"] = (json['members'] as List)
          ?.map((e) =>
              e == null ? null : Map<String, dynamic>.from(e))
          ?.toList();
     return _$ChatFromJson(json);  
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...