如何将普通模型与@freezed模型混合



我想创建CategoryModel,它有两个字段categoryNameitems,categoryName是一个String字段,但项是List<CategoryItem> items,CategoryItem依赖于冻结代码生成,而CategoryModel不是。

以下是我的型号:

import 'package:freezed_annotation/freezed_annotation.dart';
part 'category_model.freezed.dart';
part 'category_model.g.dart';
class CategoryModel {
const CategoryModel({
required String categoryName,
required List<CategoryItem> items,
});
factory CategoryModel.fromJson(
List<Map<String, dynamic>> list, String categoryName) {
return CategoryModel(
categoryName: categoryName,
items: list.map((json) => CategoryItem.fromJson(json)).toList(),
);
}
}
@freezed
class CategoryItem with _$CategoryItem {
const factory CategoryItem({
required String description,
required int price,
@JsonKey(name: 'img_url') required String imgUrl,
}) = _CategoryItem;
factory CategoryItem.fromJson(Map<String, dynamic> json) =>
_$CategoryItemFromJson(json);
}

现在使用时,我这样做:

final categories = supermarketCategories.entries.map((e) {
return CategoryModel.fromJson(
List<Map<String, dynamic>>.from(e.value),
e.key,
);
}).toList();

在ui中,我想访问如下:

data.item2.first.categoryName

data.item2.first.items

但我得到一个错误说:

没有为类型"CategoryModel"定义getter"categoryName"。请尝试导入定义"categoryName"的库,将名称更正为现有getter的名称,或定义名为"categoreName"的getter或字段。

我做错了什么?

好吧,现在您正试图在没有系统或属性访问数据的情况下创建CategoryModel。

您可以尝试将CategoryModel更改为以下内容,然后再试一次吗?

class CategoryModel {
const CategoryModel({
required this.categoryName,
required this.items,
});
final String categoryName;
final List<CategoryItem> items;
factory CategoryModel.fromJson(
List<Map<String, dynamic>> list, String categoryName) {
return CategoryModel(
categoryName: categoryName,
items: list.map((json) => CategoryItem.fromJson(json)).toList(),
);
}
}

最新更新