Flutter模型动态化赋值的方法是什么
今天小编给大家分享一下Flutter模型动态化赋值的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
实现思路
通过重载 [] 和 []= 运算符,让模型具备像字典一样读写值的方式;
类中实现编码和解码方法备用:
/// 编码
Map<String, Object?>toJson()
/// 解码
... fromJson(Map<String, Object?>? map)
实现
1、在运算符 [] 方法中用对象的编码方法 toJson 获取到对应的 Map 读取对应属性值即可;
2、在运算符 []= 方法中对比传入的 key,相同则赋值;
使用示例
var model = AppModel(
appIcon: "assets/icon_light_unselected.png",
appSize: "53.2M",
appName: "QQ音乐 - 让生活充满音乐",
appDate: "13:50",
appDescription: """【全新设计 纯净享受】
-重塑全新视觉,轻盈/纯净/无扰/为Mac系统量身设计,从内而外纯净享受;
-全新结构设计,整体交互优化/人性化和易用性大提升,操作体验豪华升级";
""",
appVersion: "版本 7.6.0",
isShowAll: false
);
print("appName before: ${model["appName"]}");//appName before: QQ音乐 - 让生活充满音乐
model["appName"] = "哈哈哈哈";
print("appName after: ${model["appName"]}");//appName after: 哈哈哈哈
实现源码
///升级模型
class AppModel {
AppModel({
this.appIcon = "-",
this.appSize = "-",
this.appName = "-",
this.appDate = "-",
this.appDescription = "-",
this.appVersion = "-",
this.isShowAll = false,
});
/// App图标
String appIcon;
/// App名称
String appName;
/// App大小
String appSize;
/// App更新日期
String appDate;
/// App更新文案
String appDescription;
/// App版本
String appVersion;
/// App更新文案
bool isShowAll;
static AppModel? fromJson(Map<String, Object?>? map) {
if (map == null) {
return null;
}
return AppModel(
appIcon: map["appIcon"].toString(),
appSize: map["appSize"].toString(),
appName: map["appName"].toString(),
appDate: map["appDate"].toString(),
appDescription: map["appDescription"].toString(),
appVersion: map["appVersion"].toString(),
isShowAll: map["isShowAll"] as bool,
);
}
Map<String, Object?>toJson() {
return {
"appIcon": this.appIcon,
"appSize": this.appSize,
"appName": this.appName,
"appDate": this.appDate,
"appDescription": this.appDescription,
"appVersion": this.appVersion,
"isShowAll": this.isShowAll,
};
}
Object? operator [](String key){
final map = this.toJson();
final result = map[key];
return result;
}
void operator []=(String key, dynamic value){
switch (key) {
case "appName":
this.appName = value;
break;
case "appIcon":
this.appIcon = value;
break;
case "appSize":
this.appSize = value;
break;
case "appName":
this.appName = value;
break;
case "appDate":
this.appDate = value;
break;
case "appDescription":
this.appDescription = value;
break;
case "appVersion":
this.appVersion = value;
break;
case "isShowAll":
this.isShowAll = value;
break;
default:
break;
}
}
}
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- layuiAdmin后台管理模板 Iframe版
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码