当前位置: 首页 > news >正文

Flutter_学习记录_json自动解析转模型

对于App开发,从网络请求回来的json数据要转成模型,如果手动转的话,比较麻烦,可以用json_annotation库来实现。具体步骤如下~

1. 引入三方库

json自动转模型,需要用到三个库:

  • json_annotation
  • json_serializable
  • build_runner

引入库的步骤如下:

在这里插入图片描述

2. 创建模型

先创建一个文件,例如文件名为image.dart, 如下图:
在这里插入图片描述
然后在image.dart文件中,新建一个模型,例如ImageEntiry, 添加对应的属性,如下图:
在这里插入图片描述

3. 引入@JsonSerializable() 的注解

在类型前面,添加@JsonSerializable() 的注解,如下图:
在这里插入图片描述

4. 提前导入自动解析会生成的文件 part 'xxx.g.dart'

因为 自动生成字典转模型 或者 模型转字典的代码,是三方库生成的,会自动放到一个新的文件里面,文件的格式就是xx.g.dart, 其中xx 表示模型对应的文件的名字。例如模型ImageEntiryimage.dart, 那么 自动生成的文件就是image.g.dart, 所以,需要先提前导入这个文件,不然会自动生成失败。如下图:
在这里插入图片描述

5. 在命令行中,执行自动生成json转模型的命令flutter packages pub run build_runner build

在命令行中,执行 flutter packages pub run build_runner build, 等一会儿,如果执行成功的话,会在目录下,看到自动生成的xx.g.dart的文件,如下图:
在这里插入图片描述

6. 在模型类中,添加fromJosntoJson的方法

自动生成的代码中,
方法名带fromJson的表示自动生成的 json转模型的方法;
方法名带toJson的表示自动生成的模型转json的方法。

在模型类中,添加fromJosntoJson的方法,使用如下:

// 字典转模型
  factory ImageEntiry.fromJson(Map<String, dynamic> json) => _$ImageEntiryFromJson(json);
  // 模型转字典
  Map<String, dynamic> toJson() => _$ImageEntiryToJson(this);

7. 完整的代码实例


import 'package:json_annotation/json_annotation.dart';
part 'image.g.dart';

()
class ImageEntiry {
   String url;
   int width;
   int height;
   int size;

   ImageEntiry({
    this.url = "",
    this.width = 0,
    this.height = 0,
    this.size = 0
  });

  // 字典转模型
  factory ImageEntiry.fromJson(Map<String, dynamic> json) => _$ImageEntiryFromJson(json);
  // 模型转字典
  Map<String, dynamic> toJson() => _$ImageEntiryToJson(this);

  double get ratio {
    if ( width != 0 && height != 0) {
      return width / height;
    } else {
      return 16/9;
    }
  }
}

文章转载自:

http://2JVukbnv.xdbbx.cn
http://G1EkKcNO.xdbbx.cn
http://zsiTfal8.xdbbx.cn
http://SW27kjX6.xdbbx.cn
http://PfCRHBsp.xdbbx.cn
http://SQd25KEP.xdbbx.cn
http://ue6utfNQ.xdbbx.cn
http://An2B7xxF.xdbbx.cn
http://YF9uFOBw.xdbbx.cn
http://4peXhpj7.xdbbx.cn
http://i1G0n7sw.xdbbx.cn
http://dPk2sQRt.xdbbx.cn
http://dxKlccD7.xdbbx.cn
http://ObdTIztS.xdbbx.cn
http://1oRu4AYB.xdbbx.cn
http://oa9dl4Lo.xdbbx.cn
http://0NlBhnrO.xdbbx.cn
http://Vo6eeX67.xdbbx.cn
http://kcIROAJA.xdbbx.cn
http://ERuchi8c.xdbbx.cn
http://hZ4bkggU.xdbbx.cn
http://2U8qibLB.xdbbx.cn
http://eplWvTvi.xdbbx.cn
http://bvCnqkLF.xdbbx.cn
http://1rOSLzAj.xdbbx.cn
http://LeIqLaX4.xdbbx.cn
http://hpuG9MTm.xdbbx.cn
http://oqtCxMFb.xdbbx.cn
http://ZEl0zHQ9.xdbbx.cn
http://4bNqH8CV.xdbbx.cn
http://www.dtcms.com/a/51358.html

相关文章:

  • 基于Asp.net的农产品销售管理系统
  • 代码托管平台对比分析:Gitee与GitLab
  • MacBook上API调⽤⼯具推荐
  • Redis | 哨兵 Sentinel
  • 免费分享一个软件SKUA-GOCAD-2022版本
  • FFmpeg-chapter7-使用 FFmpeg 解码视频(原理篇)
  • 数据结构【AVL树(平衡二叉树)】
  • 实验二:VLAN间三层通信实验
  • OCPP与ISO 15118集成:实现即插即充与车网互动(V2G)- 慧知开源充电桩平台
  • 宜宾数字产业园区新引擎:树莓集团再次布局的战略意义
  • GPIO的简介
  • freertos入门---栈的概念
  • 6.过拟合处理:确保模型泛化能力的实践指南——大模型开发深度学习理论基础
  • 【Python编程】高性能Python Web服务部署架构解析
  • Gateway Timeout504 网关超时的完美解决方法
  • 离线地图显示
  • 加密算法学习与SpringBoot实践
  • Kubernetes(K8S)部署 Redis Cluster 集群
  • Web3的技术挑战:去中心化的可扩展性与性能问题
  • 《基于WebGL的matplotlib三维可视化性能调优》——让大规模3D数据流畅运行在浏览器端!
  • PE文件安全分析实战指南:从结构解析到高级威胁狩猎
  • Golang的代码生成工具实践
  • 【AIGC】通义万相 2.1 与蓝耘智算:共绘 AIGC 未来绚丽蓝图
  • Java实战:Spring Boot application.yml配置文件详解
  • 5.训练策略:优化深度学习训练过程的实践指南——大模型开发深度学习理论基础
  • 【C++】list容器的入门及其模拟实现
  • c++为什么支持simd,而java不支持
  • valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug
  • 【gc】家电行业研发部门的阿米巴经营方案
  • DeepSeek 开源周回顾「GitHub 热点速览」