插件介绍
1 2 3 4 5 6 7 8 9 10 11 | dependencies: flutter: sdk: flutter json_annotation: ^3.0.0 cupertino_icons: ^0.1.2 dev_dependencies: flutter_test: sdk: flutter json_serializable: ^3.2.0 build_runner: ^1.6.5 # 用于自动生成代码 |
编写创建对象代码
-
利用大佬写的工具json2dart

json2dart
-
创建对象文件, 并复制上面的代码, 粘贴进去

创建对象文件, 并复制上面的代码, 粘贴进去
-
执行命令
flutter packages pub run build_runner build lib 进行一次性构建,效率比较低 -
执行命令
flutter packages pub run build_runner watch lib 这个命令可以实时文件监听,自动创建实体类生成对应的.g.dart文件。

自动生成代码文件
使用
- 初始化数据源
注意:创建Map时, 一定要指定类型, 不然报下面的错误:
1 2 3 4 5 6 7 8 9 10 11 | class _MyHomePageState extends State<MyHomePage> { // 创建Map时, 一定要指定类型, 不然报下面的错误 Map <String, dynamic>resDic = {}; ResponseModel model; @override void initState() { super.initState(); _initResDic(); } ...... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /*初始化数据源*/ _initResDic() { resDic = { "status": 1, "data": { "pageData": { "pageNum": 1, "curPage": 1, "perPage": 10 }, "hosList": [ { "id": 190, "name": "阜外医院", "illId": 1, "introduction": "北京阜外医院(全名:中国医学科学院阜外心血管病医院)的前身是解放军胸科医院,始建于1956年,心血管病研究所始建于1962年,由我国胸心外科的奠基人之一吴英恺院士一手创办。北京阜外医院、心血管病研究所是隶属于卫生部、中国医学科学院、中国协和医科大学的三级甲等心血管病专科医院。", "level": "三甲", "imgurl": "https://t.duodian.api.cheng1hu.com/attachment/hospital/2019/07/01/15/0c365acdfeb18bfc0806a7a922bee800.jpg" } ] } }; } |
- 字典转对象
1 2 3 4 5 6 | _jsonTest() { ResponseModel model = ResponseModel.fromJson(resDic); List <HosList> hosList = model.data.hosList; HosList hosListModel = hosList[0]; print(hosListModel.introduction); } |
- 对象转字典
1 2 3 4 5 6 7 8 9 10 11 | /*对象转字典*/ _objToJson() { var map = model.data.pageData.toJson(); print(map); print(map.runtimeType); } /** 打印结果: flutter: {pageNum: 1, curPage: 1, perPage: 10} flutter: _InternalLinkedHashMap<String, dynamic> */ |
注意: 发现toJson() 只能转单层的, 对于多层嵌套的结构, 还存在bug;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /*对象转字典*/ _objToJson() { print('---------------------对象转字典---------------------'); print(model); Map dic = model.toJson(); print(dic); print(dic.runtimeType); } /** flutter: ---------------------对象转字典--------------------- flutter: Instance of 'ResponseModel' flutter: {status: 1, data: Instance of 'Data'} // 第二层对象就没办法转了. flutter: _InternalLinkedHashMap<String, dynamic> */ |

