当前位置: 首页 > 知识库问答 >
问题:

Flutter&Firestore-如何从Firestore的嵌套映射创建类对象

闻人高卓
2023-03-14

我正试图将firestore文档快照映射到我所创建的自定义对象,但在此过程中出现了以下错误:

E/Flutter(6555):[错误:Flutter/lib/ui/ui_dart_state.cc(177)]未处理的异常:类型“(动态)=>TestMap”不是“Transform”的类型“(String,dynamic)=>MapEntry '”的子类型

根据我的理解,这与我解析嵌套映射“测试映射”的方式有关。是否有任何颤振/火药/飞镖专家可以帮助我理解我做错了什么,以及如何修复这个问题。

所以我在Firestore中的数据如下所示:

class Categories {
  final String category;
  final String imageurl;
  List testMap = [];

  Categories(this.category, this.imageurl);
  Map<String, dynamic> toMap() => {
        "category": this.category,
        "imageurl": this.imageurl,
        "testMap": this.testMap
      };

  Categories.fromMap(Map<String, dynamic> map)
      : category = map["category"],
        imageurl = map["imageurl"],
        testMap = map["testMap"].map((map) {  // THE ERROR IS HERE (map) 
          return TestMap.fromMap(map);
        }).toList();
}

class TestMap {
  final String v1;
  final String v2;

  TestMap(this.v1, this.v2);

  Map<String, dynamic> toMap() => {
        "v1": this.v1,
        "v2": this.v2,
      };

  TestMap.fromMap(Map<dynamic, dynamic> map)
      : v1 = map["v1"],
        v2 = map["v2"];
}
  fromFirestore() {

  final FirebaseAuth auth = FirebaseAuth.instance;

  Categories categoryObject;

  CollectionReference categoriesCollection =
      FirebaseFirestore.instance.collection('categories');

  categoriesCollection.doc('categories').get()
      // ignore: missing_return
      .then((docSnapshot) {
    for (var i = 1; i <= docSnapshot.data().length; i++) {
      print(docSnapshot.data()[i.toString()]['testMap'].toString());

      categoryObject = Categories.fromMap(docSnapshot.data()[i.toString()]);
    }
  });
}

我知道firestore映射到map ,但错误似乎是想要这个类型'(String,dynamic)'的子类型而不是map ...也许与我的类解析映射的方式有关?

多谢!

共有1个答案

满雨石
2023-03-14

您可能需要强制转换为TestMap

 testMap = map["testMap"].map((map) {  // THE ERROR IS HERE (map) 
          return TestMap.fromMap(map);
        }).toList().cast<TestMap>;
 类似资料:
  • 问题内容: 我目前正在研究应用程序的聊天功能。并且我在StreamBuilder中设置了AnimatedList,以使消息反向显示。这是我的代码 我的问题是该构建器从未被点击,因此AnimatedList从未被调用。我不确定设置是否正确,因此对此表示感谢。 编辑:我正在尝试使其像FirebaseAnimatedList小部件一样工作。我不知道这是否有助于了解我的目标。 谢谢 问题答案: 更新:我通

  • 我必须使用elasticsearch和python为需要索引的json数据创建索引。例如,我有一个嵌套数组[[39.909971141540645,1452077285.150548,1452077286.196072,1.0455241203308105]]我需要为这个数组定义一个映射,比如第一个字段是count,第二个字段是start_time,end_time,duration。请帮助说明如

  • 我有一个带有对象的RealmObject类,它实际上是PrimaryKey作为这个对象中的字符串。但不允许将对象作为主键。 因为目前不可能更改服务器的响应结构,所以我尝试了不同的方法来解决这个问题。但到目前为止,没有一个奏效。我在Android Studio中使用“io.realm:realm-gradle-plugin:0.87.2”作为和“realm-android”插件。 谢谢beeende

  • 我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...

  • 我想映射这个JSON数据: 对于此java对象: 但是它失败了,所有的值都是。我尝试在变量上方添加,但没有成功。 是否可以反序列化JSON,使其仅映射到(这个)一个类? 编辑:我使用Spring StreamListener进行如下映射:

  • 下面是Main中的随机客户端列表 第二类:产品(字符串名称、枚举类别、BigDecimal价格) 目标->预期结果:在类Main中,创建类Shopping的实例,其中属性是具有 的映射,并用随机数据//integer-购买了多少产品 null null