一尘不染

尝试根据JSON字符串值动态设置图标

flutter

我有一个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的末尾。我正在寻找一种只在字符串中写入所需内容的方法,它可以返回正确的图标小部件。


阅读 252

收藏
2020-08-13

共1个答案

一尘不染

您可以通过两种方法消除某些代码重复。

  1. 通过取出开关并将其移入它自己的功能,因此您的构建方法不会重复。

切换语句

 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));
}
2020-08-13