首页 > 解决方案 > 添加双类型属性后,JsonSerializable 不返回对象

问题描述

我使用JsonSerializable从 json 生成了 Item 模型实例,我得到了这个生成的代码。但是在我添加了双类型属性(价格)后它不会返回一个项目。没有它它工作

Item _$ItemFromJson(Map<String, dynamic> json) {
  return Item()
    ..id = json['id'] as int?
    ..kitchenId = json['kitchen_id'] as int?
    ..kitchen = json['kitchen'] == null
        ? null
        : Kitchen.fromJson(json['kitchen'] as Map<String, dynamic>)
    ..name = json['name'] as String?
    ..image = json['image'] as String?
    // This line returns null
    ..price = (json['price'] as num?)?.toDouble();
}

然后我尝试通过更改双重解析来修复它并成功

Item _$ItemFromJson(Map<String, dynamic> json) {
  return Item()
    ..id = json['id'] as int?
    ..kitchenId = json['kitchen_id'] as int?
    ..kitchen = json['kitchen'] == null
        ? null
        : Kitchen.fromJson(json['kitchen'] as Map<String, dynamic>)
    ..name = json['name'] as String?
    ..image = json['image'] as String?
    // Changed this line
    ..price = double.parse(json['price']);
}

这是我的模型

@JsonSerializable()
class Item {
  @JsonKey(name: 'id')
  int? id;

  @JsonKey(name: 'kitchen_id')
  int? kitchenId;

  @JsonKey(name: 'kitchen')
  Kitchen? kitchen;

  @JsonKey(name: 'name')
  String? name;

  @JsonKey(name: 'image')
  String? image;

  @JsonKey(name: 'price')
  double? price;

  Item();

  factory Item.fromJson(Map<String, dynamic> json) => _$ItemFromJson(json);
  Map<String, dynamic> toJson() => _$ItemToJson(this);

  @override
  String toString() {
    return '{name: $name}';
  }
}

但是当我运行 flutter pub run build_runner build 时,它被重置了:\ 我需要再次修复它。

有什么我错过的吗?每次运行 build_runner 时不修复此代码会很棒!:) 泰

PS:我的调试控制台中没有错误或任何东西

标签: flutterdartjson-serializable

解决方案


推荐阅读