Flutter CloudFirestore添加复杂类型会引发无效参数:“团队”实例

时间:2018-12-13 14:58:40

标签: dart flutter google-cloud-firestore

我有Match类,其中包含Team类型的其他类的列表。仅当列表为空时,才可以将新文档(匹配)上载到Firestore。一旦列表中有团队项目,尝试将其添加到Firestore时会抛出“ 无效参数:'Team'的实例”。团队班级仅包含简单字段,没有其他班级。

从StandardMessageCodec.writeValue引发异常

更新: 我正在使用cloud_firestore:^ 0.8.2,并调用

await firestore.collection('matches').document(match.id).setData(match);

因为除了setData(接受Map)之外,没有其他方法可以上传,所以我尝试了match.teams(列表):

  1. “团队”:团队(列表)
  2. 'teams':完全编码为json(字符串)
  3. “团队”:对单个团队项目进行编码并添加到集合(列表)

第一个选项将失败,第二个将创建单个字符串文档成员,第三个将在成员内部创建字符串数组,这些都不是我想要的-在文档内部创建团队对象数组

2 个答案:

答案 0 :(得分:1)

要完全解决上述问题,请执行以下步骤:

步骤:

  1. 使用json_serializable插件(链接:https://pub.dev/packages/json_serializable

  2. 在您的Match类的以下类级别json_serializable注释(注意选项)

    part'match.g.dart'; //实际文件将自动生成

    @JsonSerializable(anyMap:true,explicitToJson:true)

  3. 对您的Team类执行相同的操作(在上面的2中)(您可以忽略以下选项:explicitToJson):

    'team.g.dart'部分; //将自动生成

    @JsonSerializable(anyMap:true)

  4. 在终端或控制台(位于项目的根目录)中,运行: flutter pub run build_runner build 以生成所有必需的* .g.dart文件(即匹配项)。 g.dart,team.g.dart)作为序列化的类文件

    [pc-name]:[project_root_dir] [username} $ flutter pub run build_runner build

我真的希望这能像我一样完全解决您的问题。

参考:https://flutter.dev/docs/development/data-and-backend/json

答案 1 :(得分:0)

在来自Gunter的帮助下指出不支持这种数据组合后,我弄清楚了-需要将特定对象的列表转换为Map列表