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

时间:2021-05-09 08:26:37

标签: flutter google-cloud-firestore json-serialization

我正在尝试使用 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);

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

1 个答案:

答案 0 :(得分:0)

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

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