我正在构建一个应用程序,我在其中使用 IconData 类创建图标。我想将图标以字符串或整数等格式存储到数据库中并检索它,然后方便地转换回图标。
这就是我创建图标的方式。
var iconData = IconData(58717, fontFamily: 'MaterialIcons')
var icon = Icon(iconData)
Run Code Online (Sandbox Code Playgroud)
有人可以建议如何做到这一点。转换可以在 IconData 或 Icon 创建阶段完成。谢谢。
Bar*_*ska 15
我找到了一种方法来使用 IconData 类的一个名为 codePoint 的属性,它是一个表示图标的 int。
var iconData = IconData(58717, fontFamily: 'MaterialIcons')
// Store this in the database
var icon iconCodePoint = iconData.codePoint;
// Restore from the database to get icon
var iconData = IconData(iconCodePointFromDataBase, fontFamily: 'MaterialIcons');
Run Code Online (Sandbox Code Playgroud)
那么,您不需要将 IconData 保存在数据库中,您可以创建一个 dart 文件来将 IconData 保存在静态 const 字段中。但是,根据您的用例,您可以执行以下操作来达到您的目的。
第一个选项:
IconData 类的属性是 int、String 或 bool,这些数据类型被数据库接受,因此您应该将每个图标保存在列类型为 int、String 的表行中,对于 bool,您可以使用 int。
使用该表的主键作为要与该图标链接的主数据的外键。
第二个选项:
将 Icondata 转换为 JSONString 并将其保存到数据库或首选项中。如果您不知道如何从 IconData 创建 JSONString 或反之亦然,那么以下代码供您参考:
import 'dart:convert';
import 'package:flutter/material.dart';
String toJSONString(IconData data) {
Map<String, dynamic> map = <String, dynamic>{};
map['codePoint'] = data.codePoint;
map['fontFamily'] = data.fontFamily;
map['fontPackage'] = data.fontPackage;
map['matchTextDirection'] = data.matchTextDirection;
return jsonEncode(map);
}
IconData fromJSONString(String jsonString) {
Map<String, dynamic> map = jsonDecode(jsonString);
return IconData(
map['codePoint'],
fontFamily: map['fontFamily'],
fontPackage: map['fontPackage'],
matchTextDirection: map['matchTextDirection'],
);
}
Run Code Online (Sandbox Code Playgroud)
如有疑问,请评论。如果它对您有用,请不要忘记接受并投票。
| 归档时间: |
|
| 查看次数: |
2489 次 |
| 最近记录: |