`未处理的异常:无效的参数:'_$_Category'的实例`在将数据发送到firestore时形成一个冻结的生成类
Posted
技术标签:
【中文标题】`未处理的异常:无效的参数:\'_$_Category\'的实例`在将数据发送到firestore时形成一个冻结的生成类【英文标题】:`Unhandled Exception: Invalid argument: Instance of '_$_Category'` While sending data to firestore form a freezed generated class`未处理的异常:无效的参数:'_$_Category'的实例`在将数据发送到firestore时形成一个冻结的生成类 【发布时间】:2022-01-04 06:01:21 【问题描述】:我创建了两个冻结模型类。一个类里面有其他类的参数。当我尝试将数据发送到 Firestore 时,问题就开始了。出现以下错误。
E/flutter ( 6175): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Invalid argument: Instance of '_$_Category'
E/flutter ( 6175): #0 convertPlatformException
package:cloud_firestore_platform_interface/…/utils/exception.dart:14
E/flutter ( 6175): #1 MethodChannelDocumentReference.set
package:cloud_firestore_platform_interface/…/method_channel/method_channel_document_reference.dart:44
E/flutter ( 6175): <asynchronous suspension>
E/flutter ( 6175): #2 _JsonCollectionReference.add
package:cloud_firestore/src/collection_reference.dart:109
E/flutter ( 6175): <asynchronous suspension>
E/flutter ( 6175): #3 _WithConverterCollectionReference.add
package:cloud_firestore/src/collection_reference.dart:180
E/flutter ( 6175): <asynchronous suspension>
E/flutter ( 6175): #4 _HomeScreenState.product
package:mr_grocery/home/home_screen.dart:45
E/flutter ( 6175): <asynchronous suspension>
模型类
-
产品(有Category类的参数)
@freezed
class Product with _$Product
const factory Product(
required int amount,
required List<Category> categories, // Category class generated by freezed
required String description,
required List<String> images,
required bool inStock,
required String name,
required String quantity,
dynamic soldQuantity,
dynamic createdAt,
dynamic updatedAt,
bool? exclusive,
) = _Product;
factory Product.fromJson(Map<String, dynamic> json) =>
_$ProductFromJson(json);
-
类别
@freezed
class Category with _$Category
const factory Category(
required String image,
required String name,
// @_ColorSerlizeable() required Color? color,
) = _Category;
factory Category.fromJson(Map<String, dynamic> json) =>
_$CategoryFromJson(json);
使用 Firestore 包中的 withConverter
CollectionReference<Product> products()
const path = FirebasePaths.products;
return _firestore.collection(path).withConverter<Product>(
fromFirestore: (snapshot, options) => Product.fromJson(
snapshot.data() ?? const ,
),
toFirestore: (value, options) => value.toJson(),
);
build.yaml
targets:
$default:
builders:
json_serializable:
options:
# Options configure how source code is generated for every
# `@JsonSerializable`-annotated class in the package.
#
# The default value for each is listed.
any_map: false
checked: false
constructor: ""
create_factory: true
create_to_json: true
disallow_unrecognized_keys: false
explicit_to_json: true // -- Specified to true
field_rename: none
generic_argument_factories: false
ignore_unannotated: false
include_if_null: true
【问题讨论】:
【参考方案1】:它的行为类似于 explicit_to_json: false
,因为它正在尝试对您的类进行编码,而不是使用嵌套的 toJson
s。
在您的***课程中,它生成的toJson
应该是这样的:
"myNestedClass": myNestedClass.toJson(),
而不是
"myNestedClass": myNestedClass,
导致此崩溃的原因。
尝试了解您的explicit_to_json: true
为何不起作用。您可以留下更多详细信息,以便我更果断地帮助您。
您是否添加part 'product.g.dart';
来生成json_serializable
代码?
此外,如果您正在使用 Firebase,请考虑设置 any_map: true
,因为 Firebase 结构可能具有 Map<dynamic, dynamic>
而不仅仅是 Map<String, Object?>
。
【讨论】:
是的。我正在添加part 'product.g.dart';
文件以上是关于`未处理的异常:无效的参数:'_$_Category'的实例`在将数据发送到firestore时形成一个冻结的生成类的主要内容,如果未能解决你的问题,请参考以下文章
未处理的异常:将无效参数传递给认为无效参数致命的函数。在插入排序中[重复]
toJson 无法正常工作 json 序列化程序未处理的异常:无效参数:“DietModel”的实例
无法将车辆信息保存到 firebase [VERBOSE-2:ui_dart_state.cc(186)] 未处理异常:无效参数:“TextEditingController”实例