如何在 Flutter 中使用字符串访问类成员

San*_*osh 6 dart font-awesome flutter

我想设置使用 API 中的字符串作为 Fontawesome 图标。我已经添加了font_awesome_flutter plugin.
我需要将图标名称存储在变量中,然后从中创建一个对象。我想象它会像这样:

String iconfromApi = 'suitcase';
Icon(FontAwesomeIcons.iconfromApi);
Run Code Online (Sandbox Code Playgroud)

cre*_*not 2

如此处所述,您需要有权访问该dart:mirrors包,这在 Flutter 中不可用。

在 Flutter 中可行的解决方案是创建一个辅助方法。这意味着您必须为要使用的所有图标名称编写大小写代码。如果您不想手动编写所有内容,您可以查看GitHub 评论reflectable中提到的包,或者可能是 或,但是,我不确定后两者是否很合适。source_genbuild_runner

无论如何,您也可以手写一个辅助函数,如下所示:

IconData fontAwesomeIconFromString(String name) {
  switch (name) {
    case 'suitecase':
      return FontAwesomeIcons.suitecase;
    case 'gamepad':
      return FontAwesomeIcons.gamepad;
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您现在可以像这样使用它:

String iconfromApi = 'suitcase';
Icon(fontAwesomeIconFromString(iconFromApi));
Run Code Online (Sandbox Code Playgroud)

  • 听起来不错...它适合较少的图标..但在大情况下意味着我们该怎么办..? (2认同)