我在JSON格式的服务器上有一个客户端配置。
示例JSON类似于{“ icon”:“ facebook”}
我在下面有小部件。
class MySocialIcons extends StatelessWidget {
MySocialIcons({this.icon, this.color});
final String icon;
final String color;
@override
Widget build(BuildContext context) {
switch(icon) {
case 'facebook': {
return Icon(FontAwesomeIcons.facebook, color: HexColor(color));
}
break;
case 'twitter': {
return Icon(FontAwesomeIcons.twitter, color: HexColor(color));
}
break;
default: {
return Icon(FontAwesomeIcons.home, color: HexColor(color));
}
break;
}
}
}
有没有一种方法不必为500个字体很棒的图标编写500个switch语句?格式为
FontAwesomeIcons.facebook
,其中我的字符串值“ facebook”将附加在FontAwesomeIcons的末尾。我正在寻找一种只在字符串中写入所需内容的方法,它会返回正确的图标小部件。
答案 0 :(得分:2)
只需执行以下步骤即可。
从flift软件包中下载软件包[icons_helper]:https://pub.dev/packages/icons_helper
只需在需要使用JSON的动态图标的任何地方添加以下代码即可。
a)FontAwesome图标:getIconGuessFavorFA(名称:“ ICON_NAME”)
b)材质图标:getIconGuessFavorMaterial(名称:“ ICON_NAME”)
示例:
ExpansionTile(
leading: Icon(getIconGuessFavorMaterial(name:root.menuIcon)), //Icon(FontAwesomeIcons.dashcube),
key: PageStorageKey<MobileMenuList>(root),
title: Text(root.menuName),
children: root.children.map(_buildTiles).toList(),
)
注意:如果您在遵守规则时遇到任何错误(“错误:未找到Getter:'haykal'。”)。只需评论“ icons_helper.dart”中的图标
答案 1 :(得分:0)
有两种方法可以消除某些代码重复。
切换语句
IconData getIconForName(String iconName) {
switch(iconName) {
case 'facebook': {
return FontAwesomeIcons.facebook;
}
break;
case 'twitter': {
return FontAwesomeIcons.twitter;
}
break;
default: {
return FontAwesomeIcons.home;
}
}
}
构建功能
@override
Widget build(BuildContext context) {
return Icon(getIconForName(icon), color: HexColor(color));
}
或2。创建地图
Map<String, IconData> iconMapping = {
'facebook' : FontAwesomeIcons.facebook,
'twitter' : FontAwesomeIcons.twitter,
'home' : FontAwesomeIcons.home
};
构建功能
@override
Widget build(BuildContext context) {
return Icon(iconMapping [icon], color: HexColor(color));
}
答案 2 :(得分:0)
我使用了可反射的软件包,并且能够很好地反射现有模块。 这是颜色和图标常量的示例。
for clabel in clustered_labels:
new_clusters.append(
kmeans_conv1.cluster_centers_[clabel][0]
)