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

如何在Dart中获取当前函数及调用它的函数名称?

在Dart中获取当前函数及调用函数名称的方法

嘿,这个问题问得好!在Dart里确实有类似C#中System.Reflection.MethodBase.GetCurrentMethod().Name的机制,而且还能拿到调用当前函数的上级函数名称,核心是通过解析**调用栈(StackTrace)**来实现的。

具体实现思路

Dart提供了StackTrace.current来获取当前的调用栈信息,每个栈帧(Frame)包含了函数名称、文件路径、行号等关键信息。我们可以通过解析这些栈帧来提取需要的内容:

  • 索引1的栈帧:当前正在运行的目标函数(调用工具函数的那个函数)
  • 索引2的栈帧:调用目标函数的上级函数

示例代码

下面是一个实用的工具函数,能直接返回当前函数名和调用它的函数名:

import 'package:stack_trace/stack_trace.dart';

/// 获取当前函数名及调用它的函数名
Map<String, String> getFunctionNames() {
  final stackTrace = Trace.current();
  // 索引1对应调用getFunctionNames的目标函数
  final currentFunction = stackTrace.frames[1].member ?? '未知函数';
  // 索引2对应调用目标函数的上级函数
  final callerFunction = stackTrace.frames[2].member ?? '未知调用者';
  
  return {
    'currentFunction': currentFunction,
    'callerFunction': callerFunction,
  };
}

// 测试示例
void testFunction() {
  final names = getFunctionNames();
  print('当前函数:${names['currentFunction']}');
  print('调用函数:${names['callerFunction']}');
}

void main() {
  testFunction();
}

运行这段代码会输出:

当前函数:testFunction
调用函数:main

注意事项

  • 需要先添加stack_trace依赖到pubspec.yaml里:stack_trace: ^1.11.0(版本号可替换为最新稳定版)
  • 异步函数中的栈跟踪结构可能不同,需要根据实际调用场景调整栈帧索引
  • 提取的函数名可能包含类前缀(例如UserService.getUser),如果只需要纯方法名,可以通过字符串分割处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:43:36