如何使用String中的名称显示包中的图标?

时间:2019-10-27 11:43:10

标签: flutter dart

我想基于从外部来源解析的名称显示Icon。现在,我在应用程序中集成了多个新闻源,如下所示:

myPages.add(new Subpage(0, "Main", FontAwesome5Regular.newspaper, "http://url.one"));
myPages.add(new Subpage(1, "Buses", MaterialCommunityIcons.bus_multiple, "http://url.one"));

其中SubPage构造函数的3-d参数是IconData。 我想根据CSV生成所需的页面。我想放在CSV行中

    0, Main, FontAwesome5Regular.newspaper, "http://url.one"
    1, Buses, MaterialCommunityIcons.bus_multiple, "http://url.two"

我在解析csv时没有问题,但是我不明白如何将已解析的字符串“ FontAwesome5Regular.newspaper”转换为Subpage的构造函数所需的IconData。

在没有异步/等待,捕获错误等情况下获得解决方案将是很棒的,因为我真的可以确定CSV包含任何错误,所有字符串均有效,所有类均可用

谢谢您的任何想法!

2 个答案:

答案 0 :(得分:0)

您可以为此使用'dart:mirrors'库,但是不幸的是,库在flutter中不可用,因此您不能使用类的名称作为字符串来访问类的静态属性。您可以这样做:

IconData getIconData(String str) {
  switch (str) {
    case "FontAwesome5Regular.newspaper": return FontAwesome5Regular.newspaper;
    case "MaterialCommunityIcons.bus_multiple": return MaterialCommunityIcons.bus_multiple;
    default: return null;
  }
}

答案 1 :(得分:0)

Richard Heap的出色作品:

您可以更改CSV吗?假设您要发送一个雨伞图标。而不是在一个列中发送“ MaterialIcons”,在另一列中发送“ 60222”,而不是“ MaterialIcons.beach_access”。将60222解析为一个int:var codePoint = int.parse(cp);并将您的图标设为var icon = IconData(codePoint,fontFamily:ff); – 2小时前的Richard Heap