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

Flutter知识点(二)处理Json

flutter不支持反射,所以本来很简单的事情,一下子变复杂了。当然官方也提供了一些工具来方便开发者。

由于Dart的map和array的数据结构和json一样,所以在flutter中,变成了json string与Map,array之间的砖换。

(1)json结构{"name":"alan","age":18"friends":["张三","李四"]
} (2)将json转为Mapconst Map<String, dynamic> json2 = {"name":"alan", "age": "18", "friends": ["张三", "李四"]}; 

那么如何在实体类和json之间转换呢? 这时就要用到工具了。在pubspec.yaml中添加:

  build_runner: ^2.0.0json_annotation: ^4.3.0json_serializable: ^6.0.0

还需要用到flutter.bat来运行build_runner。flutter.bat在你安装的flutter sdk下面。 必须添加环境变量, 因为flutter.bat一定要在你的工程目录下运行。

 

 运行命令:flutter pub run build_runner watch --delete-conflicting-outputs

加了watch可以实时检测变化并且编译。

运行时,会出现"pub exit with code 64", 关掉所有android studio,重新打开就好了。

 以下是你手工写的实体类(文件名:user_info.dart)。 一定要加构造函数,不像java.

另外还要加上:part 'user_info.g.dart'; 不然会报错user_info.g.dart must be included as a part directive in the input library with。

import 'package:json_annotation/json_annotation.dart';
part 'user_info.g.dart';@JsonSerializable()
class UserInfo{@JsonKey(name: 'name')final String name;UserInfo({required this.name});factory UserInfo.fromJson(Map<String, dynamic> json) => _$UserInfoFromJson(json);Map<String, dynamic> toJson() => _$UserInfoToJson(this);
}
实体类写好后,再运行上面提到的命令行。就会在相同目录下生成下面的文件:
// GENERATED CODE - DO NOT MODIFY BY HANDpart of 'user_info.dart';// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************UserInfo _$UserInfoFromJson(Map<String, dynamic> json) => UserInfo(name: json['name'] as String,);Map<String, dynamic> _$UserInfoToJson(UserInfo instance) => <String, dynamic>{'name': instance.name,};

不知你有没有觉得下面的套路代码写起来很烦。 这个问题我们可以在android studio加一个liveTemplate。 

  part '$File$.g.dart';factory $Name$.fromJson(Map<String, dynamic> json) => _$ $Name$FromJson(json);Map<String, dynamic> toJson() => _$ $Name$ToJson(this);

 这样我们只要敲入from就可以自动生成了。我把part部分也加了,防止有时候忘记。 毕竟flutter这么搞json很不人性化。

http://www.lryc.cn/news/27076.html

相关文章:

  • 基本概念简介(码率,FPS(帧数),分辨率,RTMP协议)等的介绍
  • 黑盒测试重点复习内容
  • Python每日一练(20230303)
  • 基于Cortex-M7内核STM32F767NIH6,STM32F767VGT6,STM32F767VIT6嵌入式技术资料
  • Nginx SSL证书A+之路
  • 周期性温度和压力波的PID自动控制解决方法
  • 从头开始搭建一个SpringBoot项目--SpringBoot文件的上传与下载
  • It做形式主语和宾语
  • 做测试一定要知道的——软件测试流程和测试规范标准文档
  • Linux下将一个文件压缩分包成多个小文件
  • 分享5款用了一段时间,个人觉得非常nice的软件
  • 搜广推 Product-based Neural Networks (PNN) - 改进特征交叉的方式
  • IDEA2022 配置spark开发环境
  • 趣味答题竞赛小程序开发功能的详细介绍
  • 【独家】华为OD机试提供C语言题解 - 获取最大软件版本号
  • k8s编程operator实战之云编码平台——⑤项目完成、部署
  • C语言杂记(指针篇)
  • ES window 系统环境下连接问题
  • hexo部署github搭建个人博客 完整详细带图版(更新中)
  • SpringBoot集成DruidDataSource实现监控 SQL 性能
  • maven镜像源及代理配置
  • 【Java面试篇】Spring中@Transactional注解事务失效的常见场景
  • 【C】分配内存的函数
  • IDEA 断点总是进入class文件没有进入源文件解决
  • 【flink】 flink入门教程demo 初识flink
  • LeetCode 1487. 保证文件名唯一
  • 详细剖析|袋鼠云数栈前端框架Antd 3.x 升级 4.x 的踩坑之路
  • 【C++PrimerPlus】第三章 处理数据
  • 【基础算法】单链表的OJ练习(1) # 反转链表 # 合并两个有序链表 #
  • 离散数学笔记(1)命题逻辑