【问题标题】:fromJson throws Expected a value of type 'Map<String, dynamic>', but got one of type '_JsonDocumentSnapshot'fromJson 抛出预期类型为“Map<String, dynamic>”的值,但得到类型为“_JsonDocumentSnapshot”的值之一
【发布时间】:2021-05-09 08:26:37
【问题描述】:

我正在尝试使用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&lt;String, dynamic&gt;', 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);

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

【问题讨论】:

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


    【解决方案1】:

    我们应该让 Flutter 知道 snapshot.dataMap&lt;String, dynamic&gt;

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

    【讨论】:

    • 已经尝试过了,但现在才尝试。 Order doc = Order.fromJson(snapshot.data as Map&lt;String, dynamic&gt;);════════ Exception caught by widgets library ═══════════════════════════════════ Expected a value of type 'Map&lt;String, dynamic&gt;', but got one of type '_JsonDocumentSnapshot' The relevant error-causing widget was StreamBuilder&lt;DocumentSnapshot&lt;Object&gt;&gt; lib\screens\order_detail_screen.dart:169
    猜你喜欢
    • 2022-01-21
    • 2021-11-15
    • 2022-10-08
    • 1970-01-01
    • 2021-05-29
    • 2021-06-22
    • 2022-10-14
    • 2021-07-29
    • 2021-11-02
    相关资源
    最近更新 更多