我正在尝试使用 json_serializable:
。
我的 pubspec.yaml
dependencies:
json_annotation: 3.1.1
dev_dependencies:
build_runner:
json_serializable: 3.5.1
我来自 Firestore 的流
static Stream<DocumentSnapshot<Object>> getOrderById(String docId) {
return database().collection('orders').doc(docId).snapshots();
}
我的工厂在 order.dart
factory Order.fromJson(Map<String, dynamic> json) => _$OrderFromJson(json);
order.g.dart
Order _$OrderFromJson(Map<String, dynamic> json) {
return Order(
common: json['common'] == null
? null
: OrderCommon.fromJson(json['common'] as Map<String, dynamic>),
// goes like this
当我调用这个方法时
Order doc = Order.fromJson(snapshot.data);
扔给我Expected a value of type 'Map<String, dynamic>', but got one of type '_JsonDocumentSnapshot'
但是当我添加另一个完全相同的工厂时,只是期望参数不同。
order.dart
factory Order.fromSnapshot(DocumentSnapshot json) {
return Order(
common: json['common'] == null
? null
: OrderCommon.fromJson(json['common'] as Map<String, dynamic>),
// goes like this but EXACTLY same with order.g.dart OrderFromJson
然后打电话给 当我像
这样调用这个方法时Order doc = Order.fromSnapshot(snapshot.data);
它按预期工作。我怎么了?任何评论表示赞赏。
答案 0 :(得分:0)
我们应该让 Flutter 知道 snapshot.data
是一个 Map<String, dynamic>
:
Order doc = Order.fromJson(snapshot.data as Map<String, dynamic>);