flutter - 带有子列表的干净架构 toJson (reso coder)
问题描述
我正在尝试在我的项目。
在他的示例中,他实现了一个实体和一个扩展该实体的模型。实体具有所有属性,模型实现了 fromJson 和 toJson 方法。
它适用于“平面”类。
但是现在我想为具有另一个类列表的类实现它。
class Item {
String text;
}
class ItemModel extends Item{
...toJson
...romJson
}
class Order {
...
List<Item> items;
}
class OrderModel extends Item {
...
...fromJson() {
if (json['items'] != null) {
teams = new List<ItemModel>();
json['items'].forEach((v) {
items.add(Item.fromJson(v));
});
}
}
}
...toJson(){
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.items!= null) {
data['items'] = this.items.map((v) => v.toJson()).toList();
}
return data;
}
当然它不起作用,因为类项没有方法“toJson”。
实施它的正确方法是什么?在 toJson 方法中将 List 转换为 List?
编辑
当我尝试将列表项转换为 ItemModel 并且列表中有一个 Item 时,会引发异常:
type 'Item' is not a subtype of type 'ItemModel' in type cast
我现在认为以下是正确的:向 ItemModel 添加工厂方法,将 Item 转换为 ItemModel:
fromItem(Item item){
if(item is ItemModel) {
return item as ItemModel;
}
return ItemModel(..: item...);
}
这是解决这个问题的最好方法吗?
解决方案
您正在使用Item.fromJson
而不是ItemModel.fromJson
? 你试过这个吗?
class OrderModel extends Item {
...
...fromJson() {
if (json['items'] != null) {
teams = new List<ItemModel>();
json['items'].forEach((v) {
items.add(ItemModel.fromJson(v));
});
}
}
}
编辑
如果您直接在 Item 上调用 toJson,您可以将其值转换为 ItemModel,如下所示
...toJson(){
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.items != null) {
data['items'] = this.items.map((v) => (v as ItemModel).toJson()).toList();
}
return data;
}
编辑 2
使您的 Item 类抽象并添加抽象方法 fromJson a 和 toJson
abstract class Item {
//...
Item fromJson(Map json); // abstract method
Map<String, dynamic> toJson(); // abstract method
}
推荐阅读
- openssh - OpenSSH(7.7&8.1) windows 2019标准版问题
- liferay - Liferay 7.3 LoginPortlet 上不需要的 CSRF 验证
- node.js - Dockerized Node JS 应用程序无法从主机访问
- .net - dotnet pack - 错误 MSB3644: .NETFramework,Version=v3.5 的参考程序集未找到
- javascript - 使用 Jquery 在每次滚动移动(100vh)时执行的平滑滚动移动
- azure - 天蓝色更新后应用程序不会自动重启
- asp.net - 如何在按钮单击时附加到 DataGrid 而无需在 VB 中重新加载页面
- powershell - 使用 Windows pod 附加 FSx 共享
- javascript - 如何为移动设备创建切换导航菜单?
- reactjs - 反应表格单元格