You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart中获取变量名的字符串值?

获取变量名字符串的其他实现方法

针对你给出的Dart代码(看起来是Flutter场景),除了用Map/字典的方式,还有以下几种实用的实现思路:

1. 手动定义对应常量(最可靠高效)

直接手动维护一个和变量名对应的字符串常量,这是最简单且无任何额外开销的方式,适合大多数简单场景:

String foodIcon = 'assets/icons/expense/food.png';
const foodIconName = 'foodIcon'; // 手动关联变量名

不需要依赖任何库,代码清晰易懂,也不会有运行时性能问题。

2. 使用反射(仅限纯Dart环境)

Dart的dart:mirrors库提供了反射能力,可以在运行时获取变量名,但Flutter中默认禁用反射(会大幅增加包体积),仅适合纯Dart项目:

import 'dart:mirrors';

class IconHolder {
  String foodIcon = 'assets/icons/expense/food.png';
}

void main() {
  final holder = IconHolder();
  final classMirror = reflect(holder);
  
  // 遍历类中的变量,匹配值对应的变量名
  final variableName = classMirror.type.declarations.values
      .where((decl) => decl is VariableMirror && decl.getField(holder).reflectee == holder.foodIcon)
      .map((decl) => MirrorSystem.getName(decl.simpleName))
      .first;
  
  print(variableName); // 输出: foodIcon
}

注意:反射方式不够稳定,且在Flutter中无法使用,不推荐作为通用方案。

3. 代码生成(适合Flutter批量处理场景)

如果需要批量处理大量变量,可通过build_runner配合自定义注解实现编译时自动生成变量名字符串,不会增加运行时开销:

步骤示例:

  1. 定义注解类:
class VarName {
  const VarName();
}
  1. 标记目标变量:
@VarName()
String foodIcon = 'assets/icons/expense/food.png';
  1. 编写代码生成器(需依赖source_gen等库),扫描带@VarName注解的变量,自动生成对应的常量代码:
// 自动生成的代码示例
const foodIconName = 'foodIcon';

这种方式适合需要统一管理大量变量名的场景,一次性配置后后续维护成本低。

内容的提问来源于stack exchange,提问作者user8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:27:20