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

Zur*_*iel 2 dart 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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法不必为 500 个很棒的字体图标编写 500 个 switch 语句?格式是

FontAwesomeIcons.facebook 我的字符串值“facebook”将附加在 FontAwesomeIcons 的末尾。我正在寻找一种方法来在字符串中写入我想要的任何内容,并且它返回正确的图标小部件。

Fil*_*cks 5

有两种方法可以消除一些重复的代码。

  1. 通过取出开关并将其移动到它自己的函数中,这样您的构建方法就不会重复。

switch语句

 IconData getIconForName(String iconName) {
      switch(iconName) {
        case 'facebook': {
        return FontAwesomeIcons.facebook;
        }
        break;

        case 'twitter': {
          return FontAwesomeIcons.twitter;
        }
        break;

        default: {
          return FontAwesomeIcons.home;
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

构建函数

@override
Widget build(BuildContext context) {
  return Icon(getIconForName(icon), color: HexColor(color));
}
Run Code Online (Sandbox Code Playgroud)

或 2.创建地图

Map<String, IconData> iconMapping = {
  'facebook' : FontAwesomeIcons.facebook,
  'twitter' : FontAwesomeIcons.twitter,
  'home' : FontAwesomeIcons.home
};
Run Code Online (Sandbox Code Playgroud)

构建函数

@override
Widget build(BuildContext context) {
  return Icon(iconMapping [icon], color: HexColor(color));
}
Run Code Online (Sandbox Code Playgroud)