fromJson 抛出预期类型为 'Map<String, dynamic>' 的值,但得到类型为 '_JsonDocumentSnapshot' 的值

问题描述

我正在尝试使用 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,// goes like this but EXACTLY same with order.g.dart OrderFromJson

然后打电话给 当我像

这样调用这个方法时
Order doc = Order.fromSnapshot(snapshot.data);

它按预期工作。我怎么了?任何评论表示赞赏。

解决方法

我们应该让 Flutter 知道 snapshot.data 是一个 Map<String,dynamic>

Order doc = Order.fromJson(snapshot.data as Map<String,dynamic>);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...