保存IconData并在Flutter中还原

时间:2019-12-17 08:11:41

标签: flutter

我正在构建一个应用程序,其中要使用IconData类创建图标。我想将图标以字符串或整数之类的格式存储到数据库中,然后将其检索出来,然后方便地转换回图标。

这就是我创建图标的方式。

var iconData = IconData(58717, fontFamily: 'MaterialIcons')

var icon = Icon(iconData)

有人可以建议如何做到这一点。可以在IconData或Icon创建阶段完成转换。谢谢。

2 个答案:

答案 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');