【问题标题】:flutter freezed :Could not generate `toJson` code for `data` because of type颤动冻结:由于类型原因,无法为“数据”生成“toJson”代码
【发布时间】:2021-12-25 00:55:15
【问题描述】:

我正在尝试通过 freezed 和 json_serializable 创建我的模型:

import 'package:freezed_annotation/freezed_annotation.dart';

part 'language_response_model.freezed.dart';
part 'language_response_model.g.dart';

@freezed
abstract class LanguageResourceResponseModel
    with _$LanguageResourceResponseModel {
  const factory LanguageResourceResponseModel({
    required String id,
    required List<ResourceDataModel> data,
  }) = _LanguageResourceResponseModel;

  factory LanguageResourceResponseModel.fromJson(Map<String, dynamic> json) =>
      _$LanguageResourceResponseModelFromJson(json);
}

@freezed
abstract class ResourceDataModel {
  const factory ResourceDataModel({
    required String key,
    required String value,
  }) = _ResourceDataModel;

  factory ResourceDataModel.fromJson(Map<String, dynamic> json) =>
      _$ResourceDataModelFromJson(json);
}

但我收到了这个错误:

Could not generate `toJson` code for `data` because of type `ResourceDataModel`.
package:test/splash/data/models/language_response_model.freezed.dart:144:33
    ╷
144 │   final List<ResourceDataModel> data;
    │                                 ^^^^
    ╵
[INFO] Running build completed, took 2.5s

[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 189ms

[SEVERE] Failed after 2.7s

有什么问题?

dependencies:
  json_annotation: ^4.3.0
  json_serializable: ^6.0.1
dev_dependencies:
  build_runner: ^2.1.5
  flutter_launcher_icons: ^0.9.1
  freezed: ^0.15.1+1
  freezed_annotation: ^0.15.0

【问题讨论】:

  • 您需要提供一个带有 JsonKey 注释的 toJson 和 fromJson 或实现一个 JsonConverter 类。 pub.dev/packages/… 也显示在这里,只需向下滚动一点
  • 冻结你只需要实现 FromJson ,json在哪里?@MDIsmailAlamKhan
  • 通过这些更改,Freezed 会自动要求 json_serializable 生成所有必需的 fromJson/toJson。
  • ResourceDataModel 带有 @freezed 注释,但不混入 _$ResourceDataModel
  • 操作,你是对的。这是我的错。请写答案我检查你

标签: flutter freezed


【解决方案1】:

ResourceDataModel@freezed-annotated类,所以需要混入_$ResourceDataModel

@freezed
abstract class ResourceDataModel with _$ResourceDataModel {
  // ...
}

没有该 mixin,ResourceDataModel 不包含 toJson() 方法,因此 LanguageResourceResponseModel.toJson() 无法序列化 List&lt;ResourceDataModel&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多