【问题标题】:Save IconData and Restore In Flutter在 Flutter 中保存 IconData 并恢复
【发布时间】:2019-12-17 08:11:41
【问题描述】:

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

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

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

var icon = Icon(iconData)

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

【问题讨论】:

    标签: flutter


    【解决方案1】:

    我找到了一种方法来使用 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');
    

    【讨论】:

    【解决方案2】:

    好吧,您不需要将 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'],
      );
    }
    

    如有任何疑问,请发表评论。如果它对您有用,请不要忘记接受并投票。

    【讨论】:

    • 我正在寻找一个更简单的解决方案,并找到了一种使用 IconData 类的 codePoint 属性的方法。
    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2020-08-07
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多