当前位置: 代码网 > it编程>App开发>苹果IOS > Flutter 模型动态化赋值研究分析

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

2024年05月18日 苹果IOS 我要评论
一、需求来源之前无论是做 ios 开发还是 js 开发,模型动态赋值都是一个非常重要且高频使用的特性。进行 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 模型动态化赋值的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com