Flutter 模型动态化赋值研究分析

 更新时间:2023年03月13日 14:08:53   作者:SoaringHeart  
这篇文章主要为大家介绍了Flutter 模型动态化赋值研究分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、需求来源

之前无论是做 iOS 开发还是 JS 开发,模型动态赋值都是一个非常重要且高频使用的特性。进行 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;
      }
    }
}

总结

1、已经初步实现了模型的属性的动态化读写;

2、赋值操作符中的方法实现太繁琐(没有找到其他方法),改进思考:通过 json 转模型的插件二次开发自动生成如何?;

3、虽然已经有了初步实现,但是实现的方法还不完美不优雅

以上就是Flutter 模型动态化赋值研究分析的详细内容,更多关于Flutter 模型动态化赋值的资料请关注脚本之家其它相关文章!

相关文章

  • iOS SwiftUI 颜色渐变填充效果的实现

    iOS SwiftUI 颜色渐变填充效果的实现

    这篇文章主要介绍了iOS SwiftUI 颜色渐变填充效果的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • iOS 委托与文本输入(内容根据iOS编程编写)

    iOS 委托与文本输入(内容根据iOS编程编写)

    这篇文章主要介绍了iOS 委托与文本输入(内容根据iOS编程编写) 的相关资料,需要的朋友可以参考下
    2016-09-09
  • iOS开发之APP相关

    iOS开发之APP相关

    本文给大家介绍的是IOS开发系列文章的第一篇,给大家分享一些APP相关的知识点,非常的实用,有需要的小伙伴可以参考下
    2016-04-04
  • IOS代码修改音量实例详解

    IOS代码修改音量实例详解

    这篇文章主要介绍了IOS代码修改音量实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • iOS开发网络编程之断点续传

    iOS开发网络编程之断点续传

    在下载较大的文件的时候,一次不能下载完毕,这就需要用到断点续传,那么在IOS开发中该如何实现呢,下面跟着小编一起通过本文来学习下。
    2016-08-08
  • ios实现文件对比的方法

    ios实现文件对比的方法

    这篇文章主要介绍了ios实现文件对比的方法,主要是用到了filemanager,有需要的小伙伴可以参考下。
    2015-05-05
  • iOS获取手机通讯录方式方法(最新)

    iOS获取手机通讯录方式方法(最新)

    本篇文章主要介绍了iOS获取手机通讯录方式方法(最新),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • IOS中实现图片点击全屏预览

    IOS中实现图片点击全屏预览

    IOS作为一款智能手机系统,在查看图片的时候,如果能够实现全屏,对用户来说有很好的视觉体验,其实实现起来非常的简单,下面我就结合一个简单的代码给大家来分享一下,,需要的朋友可以参考下
    2015-11-11
  • IOS正则表达式之验证密码身份证手机号

    IOS正则表达式之验证密码身份证手机号

    这篇文章主要介绍了IOS正则表达式之验证密码身份证手机号的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • iOS APP实现微信H5支付示例总结

    iOS APP实现微信H5支付示例总结

    这篇文章主要介绍了iOS APP实现微信H5支付示例总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论