dart - Flutter CloudFirestore添加复杂类型会抛出无效参数: Instance of 'Team'

标签 dart flutter google-cloud-firestore

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

从StandardMessageCodec.writeValue引发异常

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

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

由于除了setData(接受Map)之外,没有其他方法可以上传,因此我尝试了match.teams(List):
  • 'teams':球队(列表)
  • 'teams':完全编码为json(字符串)
  • 'teams':对单个团队项目进行编码并添加到集合(列表)

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

    最佳答案

    要完全解决上述问题,请按照下列步骤操作:

    脚步:

  • 使用json_serializable插件(链接:https://pub.dev/packages/json_serializable)
  • 在以下类级别,您的Match类的json_serializable注释(请注意选项)

    部分“match.g.dart”;//实际文件将自动生成

    @JsonSerializable(anyMap:true,explicitToJson:true)
  • 对您的Team类执行相同的操作(在上面的2中)(您可以忽略以下选项:explicitToJson):

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

    @JsonSerializable(anyMap:true)
  • 在终端或控制台中(项目的根目录)运行
  • ,运行: 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

    关于dart - Flutter CloudFirestore添加复杂类型会抛出无效参数: Instance of 'Team' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53764600/

    相关文章:

    dart - Flutter List View 构建 ListView 报错

    android - 我如何使用StreamBuilder而不出现这个轻微的null错误

    具有自定义布局和动画的 Flutter Collapsible Appbar

    javascript - array_contains 对象查询

    flutter - 如何在Flutter中使用SharedPreferences保存List <List <String >>

    dart - 如何从DART字符串列表中获取 map 对象列表

    firebase - 在 Firestore 中使用集合组查询的 Multi-Tenancy 应用程序的最佳实践是什么?

    javascript - 在 firestore 中缓存 get 的第一个实现

    android - 如何将 json 字符串解码为 UTF-8?

    flutter - 如何使用路径剪辑 GestureDetector(或 InkWell)输入区域?