Flutter 如何使用字符串访问属性或方法?

Flutter 如何使用字符串访问属性或方法?,flutter,dart,Flutter,Dart,我使用flattericon.com创建了自定义字体图标,如下所示: // fa_pro_light_icons.dart import 'package:flutter/widgets.dart'; class FaProLight { FaProLight._(); static const _kFontFam = 'FaProLight'; static const IconData cash_register = const IconData(0xe800, fontF

我使用flattericon.com创建了自定义字体图标,如下所示:

// fa_pro_light_icons.dart
import 'package:flutter/widgets.dart';

class FaProLight {
  FaProLight._();

  static const _kFontFam = 'FaProLight';

  static const IconData cash_register = const IconData(0xe800, fontFamily: _kFontFam);
  static const IconData chart_pie = const IconData(0xe801, fontFamily: _kFontFam);
}
class MyModel {
  final String id;
  final String icon;

  const MyModel({ this.id, this.icon });
}
Widget _listItemBuilder(BuildContext context, int index) {
  const items = SAY_SOME_DUMMY_DATA;
  return ListItem(
    avatar: CircleAvatar(
      child: Icon(FaProLight.cash_register) // this work - no problem
      child: Icon(FaProLight.[items[index].icon]) // But, How to make this work?
    ),
  );
}
我从服务器上以字符串的形式获取图标名

// dummy_data.dart
const SAY_SOME_DUMMY_DATA = const [
  MyModel(id: '1', icon: 'cash_register'),
  MyModel(id: '1', icon: 'chart_pie'),
];
我的模型如下所示:

// fa_pro_light_icons.dart
import 'package:flutter/widgets.dart';

class FaProLight {
  FaProLight._();

  static const _kFontFam = 'FaProLight';

  static const IconData cash_register = const IconData(0xe800, fontFamily: _kFontFam);
  static const IconData chart_pie = const IconData(0xe801, fontFamily: _kFontFam);
}
class MyModel {
  final String id;
  final String icon;

  const MyModel({ this.id, this.icon });
}
Widget _listItemBuilder(BuildContext context, int index) {
  const items = SAY_SOME_DUMMY_DATA;
  return ListItem(
    avatar: CircleAvatar(
      child: Icon(FaProLight.cash_register) // this work - no problem
      child: Icon(FaProLight.[items[index].icon]) // But, How to make this work?
    ),
  );
}
我的列表生成器如下所示:

// fa_pro_light_icons.dart
import 'package:flutter/widgets.dart';

class FaProLight {
  FaProLight._();

  static const _kFontFam = 'FaProLight';

  static const IconData cash_register = const IconData(0xe800, fontFamily: _kFontFam);
  static const IconData chart_pie = const IconData(0xe801, fontFamily: _kFontFam);
}
class MyModel {
  final String id;
  final String icon;

  const MyModel({ this.id, this.icon });
}
Widget _listItemBuilder(BuildContext context, int index) {
  const items = SAY_SOME_DUMMY_DATA;
  return ListItem(
    avatar: CircleAvatar(
      child: Icon(FaProLight.cash_register) // this work - no problem
      child: Icon(FaProLight.[items[index].icon]) // But, How to make this work?
    ),
  );
}
所以,我的问题是:

如何使这项工作
FaProLight.[items[index].icon]
如上所述?

您不能使用Dart中的字符串访问成员,但是,您可以简单地将成员转换为地图:

class-FaProLight{
灯火通明;
静态常数_kFontFam='FaProLight';
静态常量映射图标={
“收银机”:iConnda(0xe800,fontFamily:_kFontFam),
“图表”:Iconda(0xe801,fontFamily:_kFontFam),
};
}
现在,您可以按如下方式访问您的图标:

// fa_pro_light_icons.dart
import 'package:flutter/widgets.dart';

class FaProLight {
  FaProLight._();

  static const _kFontFam = 'FaProLight';

  static const IconData cash_register = const IconData(0xe800, fontFamily: _kFontFam);
  static const IconData chart_pie = const IconData(0xe801, fontFamily: _kFontFam);
}
class MyModel {
  final String id;
  final String icon;

  const MyModel({ this.id, this.icon });
}
Widget _listItemBuilder(BuildContext context, int index) {
  const items = SAY_SOME_DUMMY_DATA;
  return ListItem(
    avatar: CircleAvatar(
      child: Icon(FaProLight.cash_register) // this work - no problem
      child: Icon(FaProLight.[items[index].icon]) // But, How to make this work?
    ),
  );
}
CircleAvatar(
子项:图标(FaProLight.icons[items[index].Icon]),
)

谢谢你的帮助,这是我最想念Javascript的时候:)另外,通过将它转换为
Map
我将错过IDE中完整的好代码(vs code):@Syed我感觉到你了。对于代码完成,您只需保留以前的变量,然后在映射中引用它们:
'chart\u pie':chart\u pie
,这样您就可以在代码中为要访问的变量声明变量。@Syed您能从注释中进一步解释您的答案吗?