Flutter模型与json的相互转换
Posted JackLee18
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter模型与json的相互转换相关的知识,希望对你有一定的参考价值。
最近遇到了需要将模型信息转换为json文件,并保存在本地,后续会根据json文件转换成对应的模型。在实践的过程中踩到了一些坑点下面一一和大家分享。
颜色色值不要使用16进制整型存储
flutter中颜色色值的表示使用16进制的整型数字,但是将16进制的整型数字存储到json的时候会被自动转换成10进制的数字,在后续阶段json转模型会比较麻烦。这里和大家分享一个第三方库hexcolor
,直接使用16进制字符串来初始化颜色Color。因此我们在将颜色色值存储到json的时候,可以将16进制的字符串存储进去。
嵌套类型如何处理
嵌套类型,刚开始接触的时候也是一脸懵,后来在fromJson,toJson这两个方法中,对应的调用一下fromJson,toJson就可以了。具体示例如下:
factory LedConfigModel.fromJson(Map<String,dynamic> json)
return LedConfigModel()
..text = json['text'] as String
..isMirror = json['isMirror'] as bool
..isBlod = json['isBlod'] as bool
..isItalic = json['isItalic'] as bool
..isLeftToRight = json['isLeftToRight'] as bool
..textColor = json['textColor']
..textColors = json['textColors']
..bgColor = json['bgColor']
..bgColors = json['bgColors']
..bgImagePath = json['bgImagePath'] as String?
..bgVideo = (json['bgVideo'] != null)?JKVideoModel.fromJson(json['bgVideo']):null // 这里是嵌套模型
..fontSize = json['fontSize'] as double
..fontFamily = json['fontFamily'] as String
..speed = json['speed'] as double
..fontEffect = JKFontEffect.values[json['fontEffect']]
..scrollDirecton = Axis.values[json['scrollDirecton']]
..borderEffect = JKBorderEffect.values[json['borderEffect']]
..backgroundMode = JKBackgroundMode.values[json['backgroundMode']];
Map<String, dynamic> toJson()
LedConfigModel instance = this;
return <String, dynamic>
'text': instance.text,
'isMirror': instance.isMirror,
'isBlod': instance.isBlod,
'isItalic': instance.isItalic,
'isLeftToRight': instance.isLeftToRight,
'textColor': instance.textColor,
'textColors': instance.textColors,
'bgColor': instance.bgColor,
'bgColors': instance.bgColors,
'bgImagePath': instance.bgImagePath,
'JKVideoModel': instance.bgVideo?.toJson(),//这里是嵌套模型
'fontSize': instance.fontSize,
'fontFamily': instance.fontFamily,
'speed': instance.speed,
'fontEffect': instance.fontEffect.index,
'scrollDirecton': instance.scrollDirecton.index,
'borderEffect': instance.borderEffect.index,
'backgroundMode': instance.backgroundMode.index,
;
枚举类型如何处理
将枚举值保存到json中,我这边是以数字的形式进行存储。json转模型的时候,将数字恢复成相应的枚举值。具体示例如下:
######
其中红色框标记出来的就是数字转枚举值,以及枚举值转数字。具体参考的博客如下:Dart 枚举原始值指定问题 及 原始值与枚举值转换问题
其他
在使用模型与json相互转换的时候。给大家推荐一下个三方库,json_model。
以上是关于Flutter模型与json的相互转换的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:使用 json_serializable 将 json 转换为模型时出现问题