我有一个冻结的类,看起来像这样 -
\n\n@freezed\nabstract class User with _$User {\n factory User(\n {@required String uid,\n String firstName,\n String lastName,\n String email,\n Map<String, dynamic> pictures,\n @Default(false) bool isAdmin}) = _User;\n\n factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);\n}\n\nRun Code Online (Sandbox Code Playgroud)\n\n这个类保存在cloud firestore中,我用它来读取它:
\n\nUser user = User.fromJson(dataFromFirebase);
但我在阅读时遇到此错误:
\n\n#0 _$_$_UserFromJson (package:my_app/freezed/freezed_classes.g.dart:15:32)\n#1 new _$_User.fromJson (package:my_app/freezed/freezed_classes.freezed.dart:68:7)\n#2 _$UserFromJson (package:my_app/freezed/freezed_classes.freezed.dart:11:16)\n#3 new User.fromJson (package:my_app/freezed/freezed_classes.dart:18:55)\n#4 FirestoreService.getUserInfo (package:my_app/services/firestore_service.dart:75:22)\n<asynchronous suspension>\n#5 FirebaseAuthService.currUserFromUserCollection (package:my_app/services/firebase_auth_service.dart:27:53)\n#6 FirebaseAuthService._userFromFirebase (package:my_app/services/firebase_auth_service.dart:17:27)\n#7 FirebaseAuthService.signInWithEmailAndPassword (package:my_app/services/firebase_auth_service.dart:47:12)\n<asynchronous suspension>\n#8 EmailPasswordSignInModel.submit (package:finc<\xe2\x80\xa6>\nRun Code Online (Sandbox Code Playgroud)\n\n有谁知道这里会发生什么?我尝试使用 和 作为我的 Map 类的类型(它有一个 String 键和一个 String 值),但仍然抛出相同的异常。
\n好吧,我终于明白了。似乎是 json_serialized 包的问题。我在项目根目录中创建了一个名为 build.yaml 的新文件,其中包含以下内容:
\n\ntargets:\n $default:\n builders:\n json_serializable:\n options:\n # Options configure how source code is generated for every\n # `@JsonSerializable`-annotated class in the package.\n #\n # The default value for each is listed.\n any_map: true\n checked: false\n create_factory: true\n create_to_json: true\n disallow_unrecognized_keys: false\n explicit_to_json: false\n field_rename: none\n ignore_unannotated: false\n include_if_null: true\n nullable: true\nRun Code Online (Sandbox Code Playgroud)\n\n除 之外的所有值均为默认值any_map,默认情况下为 false。
根据文档
\n\n\n\n\nbool anyMap :如果为 true,Map 类型不会被假定为 Map \xe2\x80\x93,这是 dart:convert 中 JSON\n 解码返回的 Map 实例的默认类型。
\n
所以将其设置为 true 解决了我的问题!
\n| 归档时间: |
|
| 查看次数: |
8200 次 |
| 最近记录: |