带有子列表的干净架构 toJson(reso 编码器)

2024-05-03

我正在尝试使用干净的架构(由 reso 编码器解释:https://resocoder.com/2019/09/09/flutter-tdd-clean-architecture-course-4-data-layer-overview-models/ https://resocoder.com/2019/09/09/flutter-tdd-clean-architecture-course-4-data-layer-overview-models/)在我的项目中。

在他的示例中,他实现了一个实体和扩展该实体的模型。 该实体具有所有属性,并且模型实现 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。

EDIT

当我尝试将列表项转换为 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...);
  }

这是解决这个问题的最好方法吗?


我现在通过以下方式解决了它。

我在模型类中添加了一个方法来将实体转换为模型

factory ItemModel.fromItem(Item item) {
    if (item is ItemModel) {
      return item;
    }
    return ItemModel(
      text: item.text,
    );
  }

并适配了toJson方法

...toJson(){
      final Map<String, dynamic> data = new Map<String, dynamic>();
      if (this.items != null) {
      data['items'] = this.items.map((v) => ItemModel.fromItem(v).toJson()).toList();
      }
      return data;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有子列表的干净架构 toJson(reso 编码器) 的相关文章

  • 如何从 BottomNavigationBar 中删除图标?

    我只需要 BottomNavigationBarItem 中的标签 但我找不到删除它们的方法 您可以隐藏标签showSelectedLabels and showUnselectedLabels设置为 false 但图标没有等效项 构造函数
  • 如何在flutter中绕过SSL证书验证?

    如何在flutter中绕过SSL证书验证 错误 握手异常 客户端中的握手错误 操作系统错误 CERTIFICATE VERIFY FAILED 自签名证书 handshake cc 345 您需要配置 HttpService 以使用自签名
  • 如何让“material-dropdown-select”显示当前模型值

    使用 AngularDart 角度组件 https github com dart lang angular components 我需要创建一个下拉列表 其中填充了一小部分项目 使其工作 并自动设置为模型中对象的当前选择 尚未使其工作 我
  • 使用 Flutter 基础类型而不使用 Flutter

    我需要在没有 Flutter 的环境中使用 lib package flutter foundation dart 中存在三种类型 他们是 ByteData ReadBuffer and WriteBuffer 是否可以在不依赖整个 Flu
  • flutter 中 sqlite 中的多个参数

    我想知道如何将多个参数传递给 sqllite 中的原始查询 我的代码如下 query async get a reference to the database Database db await DatabaseHelper instan
  • 扑。应用程序不会崩溃并发送崩溃报告

    我已经集成了Firebase Crashlytics在我的应用程序中 我正在测试 Android 应用程序 我强迫崩溃来检查它 if true List arr throw arr 1 2 我的问题是应用程序不会崩溃 我只是在日志中得到这个
  • Flutter Firestore - 如何从文档字段中的文档引用获取数据?

    我正在构建一个具有不同问题类型的自学应用程序 现在 其中一个问题有一个包含文档参考列表的字段 在 Flutter 中 我有以下代码 Query
  • 已发布的 Flutter 应用程序在启动时崩溃

    编辑 此问题的解决方案是将您的 flutter 版本升级到较新的 dev 版本 then 1 7 0 您还可以上传单独的 APK 版本 但我个人不喜欢这个选项 请确保您没有从 flutter github 开发存储库下载 错误的构建 因为那
  • 配置根项目“firebase_auth”时出现问题

    my error 我无法构建 apk 发布文件 我完成了应用程序一段时间 没有出现错误 几天后 我在构建应用程序时收到此错误 请告诉我如何摆脱它 我尝试了 4 个小时 什么也没得到 FAILURE Build failed with an
  • 如何展平列表?

    我怎样才能轻松地压平List在达特 例如 var a 1 2 3 a b c true false true var b 1 2 3 a b c true false true 我该如何转向a into b 即变成一个List包含所有这些值
  • Flutter:将字符串转换为 Map

    我正在使用 SQFlite 在本地存储数据 我有一个表 其中有一个名为 json 的字段 该字段的类型为 TEXT 并存储转换为字符串的 json 例如 name Eduardo Age 23 性别男 到目前为止 一切正常 但随后我需要从数
  • 未处理的异常:A 产品在处置后使用

    我在用着MultiProvider我收到此错误 Unhandled Exception A Products was used after being disposed Once you have called dispose on a P
  • Dart 从 UInt8List 获取扩展

    我正在使用该包图像选择器 https pub dev packages image picker接受来自用户的图像 这会产生 PickedFile 和字节数组 由于图像随后被上传 我想知道如何从字节数组中猜测 mime 类型 PickedF
  • Flutter Web 崩溃并显示无法打开文件 client.js

    我可以就这个错误请求你的帮助吗 当我第一次尝试使用 flutter run d chrome 运行 flutter web 时会发生这种情况 Launching lib main dart on Chrome in debug mode S
  • Cloud Functions,删除Firestore SubCollections,是否需要AdminToken?

    我正在尝试构建可调用的云函数 当用户删除帖子时 它也会尝试删除评论 这是帖子的子集合 所以我看到了这个例子并像文档示例一样实现 const admin require firebase admin const firebase tools
  • 滑动返回手势颤动

    如何在颤振中实现从左侧滑动返回的手势 不确定它是否已经在 iOS 上自动实现 但我也希望在 Android 上也能实现 因为事情正在变得基于手势 Use CupertinoPageRoute使其在 Android 上运行 import pa
  • library_private_types_in_public_api 和 StatefulWidget

    将 linter 升级到新版本后 flutter lints 2 0 1 在我的 pubspec 中 linter 启用此规则 公共 API 中的库私有类型 https dart dev tools linter rules library
  • dart json.encode(data) 不能接受其他语言

    我目前正在使用 Dart 进行 Web 开发 使用mockclient实现服务 但是 出现以下错误 下面的实现代码是一个继承mockClient的内存web api服务 调用client send 并返回结果的代码 test value是j
  • 如何在flutter中的命名路由中传递多个参数

    我正在尝试将多个参数传递给命名路由 我尝试了很多事情 但到目前为止还没有成功 谁能告诉我如何实现这一目标 路线 dart import package flutter cupertino dart import package flutte
  • 如何在 Dart 中以正确的方式重定向和重新加载?

    在 Dart 中进行重定向和重新加载的首选方法是什么 我们是否只使用 window location href window location href 有几种不同的方法可以处理 URI 更改 每种方法都有自己的用途 当您想要将用户发送到另

随机推荐

  • 如何为 SSMS 2019 (v18) 创建扩展

    SQL Server Management Studio 18 RC1 https learn microsoft com en us sql ssms download sql server management studio ssms
  • 如何自动创建 WPF Viewmodel 属性

    我在 WPF 项目中使用 Visual Studio 17 和 Resharper 该项目向用户显示大量信息 因此我有很多如下所示的属性 private double foo public double Foo get return foo
  • 从 Restful 身份验证迁移到 Devise

    许多 Rails 2 3 应用程序正在使用 Restful Authentication 但该插件似乎与 Rails 3 存在一些问题 在升级到 Rails 3 时 我一直在使用 Devise 有什么办法可以顺利地从 Restful Aut
  • 明确的控制不会处置它们——风险是什么?

    有多个线程 a https stackoverflow com questions 1757116 remove tabpage dispose or clear or both b https stackoverflow com ques
  • 如何使用 JavaScript 或 jQuery 从 URL 下载文件?

    我使用 jQuery fileDownload 插件从 URL 下载文件 fileDownload url contentType text csv contentDisposition attachment filename url sp
  • 正确解析包含“+”字符的字段

    我遇到了一个奇怪的情况 我在其中重现了https github com lgueye uri parameters behavior https github com lgueye uri parameters behavior 自从我们迁
  • 加入或合并 pandas 中的覆盖

    我想对具有日期时间索引的数据框执行联接 合并 追加操作 假设我有df1我想添加df2到它 df2可以有更少或更多的列以及重叠的索引 对于索引匹配的所有行 如果df2具有相同的列df1 我想要的值df1被那些来自df2 我怎样才能获得想要的结
  • 在 ES6 Node.js 中导入“.json”扩展名会引发错误

    我们正在尝试使用 Node js 导出和导入 ES6 模块的新方法 对于我们来说 从package json文件 下面的代码应该做到这一点 import name version from package json 但是 执行时会抛出以下错
  • 如何在 Android 中嵌入和播放 YouTube 视频

    我们可以在 Android 应用程序中观看 YouTube 视频吗 我的意思是 如果我们有 YouTube 上的视频链接 我们可以在 VideoView 或其他小部件中播放它吗 有什么想法吗 答案很简单 是 请查看以下链接 如何在我的 An
  • 如何在fastapi中调用另一个api?

    我能够从另一个 API 获取一个 API 的响应 但无法将其存储在某处 在返回响应之前存储在文件或其他内容中 response RedirectResponse url apiname 我想访问带有标题和正文的发布请求 我想存储此响应内容而
  • Webview 不显示带有颜色的文本

    在我的应用程序中 我在 webview 中显示一些 Html 内容 String webViewConent this is some span style color 2ecc71 sample span string webView l
  • 使用 libsvm 交叉验证后重新训练

    我知道交叉验证用于选择好的参数 找到它们后 我需要在不使用 v 选项的情况下重新训练整个数据 但我面临的问题是 在使用 v 选项训练后 我得到了交叉验证精度 例如 85 没有模型 我看不到 C 和 gamma 的值 在这种情况下我该如何重新
  • 带数据注释的枚举类型的 Json.NET 自定义序列化

    我想序列化一个枚举类型 以便它返回一个数组 其中枚举作为对象 其中包含 值 名称 和数据注释值 我需要序列化方面的帮助 这是我到目前为止所做的 枚举 public enum Status Display Name Active status
  • 如何获取UIImage的大小(KB)

    我从以下位置获取图像didFinishPickingMediaWithInfo UIImage originalImage UIImage info valueForKey UIImagePickerControllerOriginalIm
  • Gatsby 在 graphql 查询返回后获取图像路径

    所以我用 Gatsby 和 Remark 写了一个博客网站 我的帖子结构如下 Library category name article name index md 这非常有效 使我能够制作类似的路径 category name artic
  • Tesseract OCR 将削减的 0 混淆为 8

    我已经在终点字体上训练了 tesseract 但无论如何 我都无法让它识别 0 我正在使用 jTessEditor 创建训练 tif 和框 即使在验证时 它也会将所有 0 读取为 8 我有什么遗漏的吗 下面是 0 的示例 它将其读作 8 我
  • 为 Pipenv 提供不同的源或 git url 以进行生产和开发

    我们正在使用Pipenv https github com pypa pipenv and Pipfiles https github com pypa pipfile用于管理我们的 Python 包需求 我们使用私有 GitLab 服务器
  • Azure Nvidia 中的 apt-update 出现公钥错误

    我在 AZURE 上启动了 NVIDIA VM 并尝试使用进行更新sudo apt update但给出错误 Hit 2 http azure archive ubuntu com ubuntu focal InRelease Hit 3 h
  • uninitialized_copy memcpy/memmove 优化

    我最近开始研究 MSVC 实现中的 STL 那里有一些不错的技巧 但是我不知道为什么使用以下标准 The std uninitialized copy被优化为一个简单的memcpy memmove如果满足某些条件 据我了解 输入范围可以是m
  • 带有子列表的干净架构 toJson(reso 编码器)

    我正在尝试使用干净的架构 由 reso 编码器解释 https resocoder com 2019 09 09 flutter tdd clean architecture course 4 data layer overview mod