我想创建CategoryModel
,它有两个字段categoryName
和items
,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(),
);
}
}