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

frn*_*rno 6 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);
Run Code Online (Sandbox Code Playgroud)

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

  1. '团队':团队(列表)
  2. 'teams' : 完全编码为 json (String)
  3. 'teams' :编码单个团队项目并添加到集合(列表)

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

小智 9

要彻底解决上述问题,请按照以下步骤操作:

脚步:

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

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

    '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 文件(即 match.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