当前位置: 首页 > 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;
    }
  }
}

相关文章:

  • 基于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数据流畅运行在浏览器端!
  • wordpress 手机短信/临沧seo
  • 苏州朗冠网站建设公司/百度收录教程
  • 哪个网站买东西最便宜/怎么安装百度
  • 如何建设个人网站和博客/2345导航网址
  • 新疆正能量软件/昆明seo技术培训
  • 大学城网站开发公司/泉州seo技术