我有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(列表):
第一个选项将失败,第二个将创建单个字符串文档成员,第三个将在成员内部创建字符串数组,这些都不是我想要的-在文档内部创建团队对象数组
答案 0 :(得分:1)
要完全解决上述问题,请执行以下步骤:
步骤:
使用json_serializable插件(链接:https://pub.dev/packages/json_serializable)
在您的Match类的以下类级别json_serializable注释(注意选项)
part'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文件(即匹配项)。 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列表