我正在构建一个应用程序,其中要使用IconData类创建图标。我想将图标以字符串或整数之类的格式存储到数据库中,然后将其检索出来,然后方便地转换回图标。
这就是我创建图标的方式。
var iconData = IconData(58717, fontFamily: 'MaterialIcons')
var icon = Icon(iconData)
有人可以建议如何做到这一点。可以在IconData或Icon创建阶段完成转换。谢谢。
答案 0 :(得分:0)
那么您不需要将IconData保存在数据库中,您可以创建一个dart文件来将IconData保留在静态const字段中。但是,根据您的用例,您可以按照自己的目的进行操作。
第一个选项:
IconData类的属性是int,String或bool,并且这些数据类型已被数据库接受,因此您应将每个图标保存在其列类型为int,String的表行中,对于bool,可以使用int。 / p>
使用该表的主键作为要与之链接该图标的主数据的外键。
第二个选项:
将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'],
);
}
如有任何疑问,请发表评论。如果它对您有用,那么别忘了接受并投票。
答案 1 :(得分:0)
我找到了一种方法,可以使用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');