【问题标题】:How to parse a document from my Firestore Database如何解析我的 Firestore 数据库中的文档
【发布时间】:2019-01-11 14:46:20
【问题描述】:

如何解析 Firestore 中的数据。我的文档看起来像:

通过这段代码,我得到了我的数据。

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) 函数中,我想从地图中获取数据。那么,我该如何解析这些数据呢?

感谢您的帮助。

编辑: 我创建了一个类 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,
    );
  }
}

还有一个类Produkt:

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&lt;dynamic, dynamic&gt;' is not a subtype of type 'Map&lt;String, dynamic&gt;'

【问题讨论】:

标签: dart flutter google-cloud-firestore


【解决方案1】:

我有同样的问题。我正在使用json_serializable 包进行自动生成。

对我来说,从地图中删除演员类型很有帮助

  factory Produkt.fromJson(Map parsedJson)

并允许注释上的任何地图

@JsonSerializable(anyMap: true)

flutter repository 中有关此主题的一些讨论存在问题。 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);  
  }

【讨论】:

  • 可以解释什么是'_$ChatFromJson(json)'?
  • _$ChatFromJson 来自包“json_serializable”和一个自动生成的类
  • @AntonSchrage 我用一些示例数据进行了尝试,它可以工作。您能否发布您从服务器获得的响应?
  • 我在另一个问题中发现了我的错误:)
猜你喜欢
  • 2013-12-25
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2020-09-17
  • 1970-01-01
相关资源
最近更新 更多