Usa*_*rim 6 dart flutter google-cloud-firestore json-serializable freezed
我用 freeze 创建了两个模型类。一个类内部有其他类的参数。当我尝试将数据发送到 firestore 时,问题开始了。出现以下错误。
\nE/flutter ( 6175): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Invalid argument: Instance of \'_$_Category\'\nE/flutter ( 6175): #0 convertPlatformException\npackage:cloud_firestore_platform_interface/\xe2\x80\xa6/utils/exception.dart:14\nE/flutter ( 6175): #1 MethodChannelDocumentReference.set\npackage:cloud_firestore_platform_interface/\xe2\x80\xa6/method_channel/method_channel_document_reference.dart:44\nE/flutter ( 6175): <asynchronous suspension>\nE/flutter ( 6175): #2 _JsonCollectionReference.add\npackage:cloud_firestore/src/collection_reference.dart:109\nE/flutter ( 6175): <asynchronous suspension>\nE/flutter ( 6175): #3 _WithConverterCollectionReference.add\npackage:cloud_firestore/src/collection_reference.dart:180\nE/flutter ( 6175): <asynchronous suspension>\nE/flutter ( 6175): #4 _HomeScreenState.product\npackage:mr_grocery/home/home_screen.dart:45\nE/flutter ( 6175): <asynchronous suspension>\nRun Code Online (Sandbox Code Playgroud)\n模型类
\n\n@freezed\nclass Product with _$Product {\n const factory Product({\n required int amount,\n required List<Category> categories, // Category class generated by freezed\n required String description,\n required List<String> images,\n required bool inStock,\n required String name,\n required String quantity,\n dynamic soldQuantity,\n dynamic createdAt,\n dynamic updatedAt,\n bool? exclusive,\n }) = _Product;\n\n factory Product.fromJson(Map<String, dynamic> json) =>\n _$ProductFromJson(json);\n}\nRun Code Online (Sandbox Code Playgroud)\n@freezed\nclass Category with _$Category {\n const factory Category({\n required String image,\n required String name,\n // @_ColorSerlizeable() required Color? color,\n }) = _Category;\n\n factory Category.fromJson(Map<String, dynamic> json) =>\n _$CategoryFromJson(json);\n}\nRun Code Online (Sandbox Code Playgroud)\n使用withConverterFirestore 包
CollectionReference<Product> products() {\n const path = FirebasePaths.products;\n return _firestore.collection(path).withConverter<Product>(\n fromFirestore: (snapshot, options) => Product.fromJson(\n snapshot.data() ?? const {},\n ),\n toFirestore: (value, options) => value.toJson(),\n );\n }\nRun Code Online (Sandbox Code Playgroud)\n构建.yaml
\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: false\n checked: false\n constructor: ""\n create_factory: true\n create_to_json: true\n disallow_unrecognized_keys: false\n explicit_to_json: true // -- Specified to true\n field_rename: none\n generic_argument_factories: false\n ignore_unannotated: false\n include_if_null: true\nRun Code Online (Sandbox Code Playgroud)\n
它的行为就像explicit_to_json: false,因为它试图对您的类进行编码并且不与嵌套一起操作toJson。
在你的顶级类上,它生成的toJson应该是这样的:
{
"myNestedClass": myNestedClass.toJson(),
{
Run Code Online (Sandbox Code Playgroud)
代替
{
"myNestedClass": myNestedClass,
{
Run Code Online (Sandbox Code Playgroud)
这导致了这次崩溃。
尝试理解为什么你的explicit_to_json: true不工作。您可以留下更多详细信息,以便我可以更积极地帮助您。
您是否添加part 'product.g.dart';来生成json_serializable代码?
另外,如果您正在使用 Firebase,请考虑设置any_map: true,因为 Firebase 结构可能有 aMap<dynamic, dynamic>而不是 only Map<String, Object?>。
| 归档时间: |
|
| 查看次数: |
4955 次 |
| 最近记录: |