【发布时间】:2019-05-14 19:57:48
【问题描述】:
我有一个类 Match,它有一个 Team 类型的其他类的列表。仅当列表为空时,才能将新文档(匹配)上传到 Firestore。一旦列表中有 Team 项目,尝试将其添加到 Firestore 会抛出“Invalid argument: Instance of 'Team'”。 Team 类只包含简单的字段,没有其他类。
StandardMessageCodec.writeValue 抛出异常
更新: 我正在使用 cloud_firestore: ^0.8.2,并调用
await firestore.collection('matches').document(match.id).setData(match);
由于除了setData(接受地图)之外没有其他方法可以上传,我尝试了match.teams(列表):
- 'teams':团队(列表)
- 'teams':完全编码为 json(字符串)
- 'teams' :编码单个团队项目并添加到集合(列表)
第一个选项将失败,第二个将创建单个字符串文档成员,第三个将在成员内部创建一个字符串数组,这些都不是我想要的 - 在文档内创建一个团队对象数组
【问题讨论】:
-
您不能在 Firestore 中存储类,只能存储 JSON。 flutter.io/docs/development/data-and-backend/json
-
StandardMessageCodec.writeValue 的处理也确实对 List 类型进行了处理,我认为它支持这种数据结构。我会尝试将其展平为 json
-
当然,JSON 支持列表,但该列表中不支持自定义类。
-
这不像我希望的那样工作 - 如果我序列化整个列表,它将在文档中创建一个字符串成员,如果我序列化单个项目并创建一个列表,它是 Firestore 文档中的字符串数组;
-
刚刚想通了,我应该把它做成一个 Map 列表,而不是把它展平成 jsons;感谢 Gunter 引导我找到答案
标签: dart flutter google-cloud-firestore