尝试根据JSON字符串值动态设置图标
问题内容:
我有一个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的末尾。我正在寻找一种只在字符串中写入所需内容的方法,它可以返回正确的图标小部件。
问题答案:
您可以通过两种方法消除某些代码重复。
- 通过取出开关并将其移入它自己的功能,因此您的构建方法不会重复。
切换语句
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));
}