Flutter开发中如何将Color颜色值存储到SQLite数据库
你当前的表结构设计方向是可行的,但直接调用Color.toString()存储的方案存在解析冗余问题,推荐以下两种更优雅的实现方案:
方案1:调整字段类型为Integer(性能最优)
Flutter中Color类的value属性本身就是32位int类型的ARGB值,直接存储该int值是效率最高的方案:
- 修改建表语句,将color字段类型从text改为integer:
db.execute(''' create table tags ( id integer primary key autoincrement, title text not null, color integer not null ) ''');
- 构造TagModel时直接传入color的value值:
TagModel( title: _addTagTitleController.text, color: _currentColor.value, )
- 读取数据时直接转换为Color对象即可,无需额外解析:
Color tagColor = Color(tagModel.color);
方案2:存储十六进制字符串(通用性最强)
如果不想修改现有表的text类型,或者需要跨端兼容颜色值读取,可以选择存储十六进制颜色字符串:
- 构造TagModel时将color的value转换为十六进制字符串:
TagModel( title: _addTagTitleController.text, color: _currentColor.value.toRadixString(16), // 生成类似'fff44336'的字符串 )
- 读取数据时转换为Color对象:
Color tagColor = Color(int.parse(tagModel.color, radix: 16));
注意:不要直接使用
_currentColor.value.toString()存储,该方法返回的是类似Color(0xfff44336)的格式化字符串,后续读取时需要额外提取括号内的数值才能转换,增加了不必要的逻辑复杂度和出错概率。
内容的提问来源于stack exchange,提问作者amin jamali
相关产品推荐
相关产品推荐

