Flutter中如何用字符串搭配点操作符动态调用MyCustomIcons自定义图标
实现方案
因为Flutter禁用了反射(dart:mirrors)来保证打包优化(tree shaking)的效果,所以不能直接通过字符串动态调用MyCustomIcons的同名属性,你可以通过键值映射表的方式实现需求,实现成本低、性能也稳定。
步骤1:定义图标映射表
提前把你存在Firebase里的图标字符串和对应的自定义图标一一绑定,写为一个常量Map:
// 建议单独存到一个常量文件里方便维护 const Map<String, IconData> teamIconMap = { 'myBlue': MyCustomIcons.myBlue, 'myRed': MyCustomIcons.myRed, // 其他队伍的图标依次加在这里 'default': Icons.gamepad, // 兜底图标,匹配不到的时候用 };
步骤2:修改图标调用逻辑
取到队伍的图标字符串后,直接从映射表中取值即可,加兜底逻辑避免空异常:
Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: EdgeInsets.only(left: 10.0, right: 10.0), child: Text( teams[teamsCounter].name, style: widget.teamNameTextStyle, textAlign: TextAlign.center, ), ), Icon( // 匹配不到就用兜底图标 teamIconMap[teams[teamsCounter].icon] ?? teamIconMap['default']!, size: widget.iconSize, color: widget.iconColor, ), ], );
后续如果新增队伍图标,只需要在teamIconMap里加对应的键值对即可,不需要修改其他逻辑。
内容的提问来源于stack exchange,提问作者user11856923
相关产品推荐
相关产品推荐

