mcpField
F
flutter-devtools

flutter-devtools

github.com/dhruvanbhalara开发3051 次安装8 周前更新
代码仓库

关于 flutter-devtools

flutter-devtools 是面向 Flutter 开发者的调试技能,介绍如何结合 DevTools 与框架诊断功能排查布局、性能和内存问题。

主要功能

  1. 01通过命令行或 IDE 连接 DevTools
  2. 02使用布局与重绘可视化标记
  3. 03在 Inspector 中展示组件状态
  4. 04分析 UI 与 Raster 性能
  5. 05通过堆快照检查内存泄漏

适用场景

  1. 01定位边距或尺寸异常
  2. 02追踪组件重建和绘制瓶颈
  3. 03检查页面开关前后的内存变化

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dhruvanbhalara/skills --skill flutter-devtools

安装后在 Claude Code 中输入/flutter-devtools确认已加载。

详细介绍

Flutter DevTools 与可视化调试

要高效调试 Flutter 中的 UI、性能问题和内存泄漏,需要熟练使用 DevTools 套件,并利用框架级调试属性。

目录


连接 DevTools

启动 DevTools 并连接到正在运行的 Flutter 应用:

  1. 通过 CLI:在终端中运行 flutter devtools,启动 DevTools Web 应用服务器。
  2. 通过 IDE:
    • 在 VS Code 中,打开命令面板(Cmd+Shift+P),然后选择 Dart: Open DevTools。
    • 在 Android Studio 中,点击运行/调试工具栏中的 Flutter DevTools 图标。
  3. 执行模式:
    • 使用 Debug Mode 查看 Inspector、Network 和 Logging 标签页。
    • 使用 Profile Mode(flutter run --profile)分析性能和内存。由于 VM 开销,切勿在 Debug 模式下分析性能。

可视化调试标志

切换这些运行时属性,即可直接在模拟器/设备上直观诊断布局和渲染性能。

导入 rendering 库以使用这些标志:

import 'package:flutter/rendering.dart';
import 'package:flutter/foundation.dart';
关键调试标志
标志用途用法
debugPaintSizeEnabled = true可视化布局框、边距、内边距和对齐方式。用于找出内边距或尺寸问题。
debugRepaintRainbowEnabled = true在发生重绘的图层上叠加不断旋转变化的边框颜色。如果静态 Widget 在滚动时颜色发生变化,可为其添加 RepaintBoundary 包裹。
debugPaintLayerBordersEnabled = true用橙色描绘各个合成器图层的边框。用于调试合成图层拆分问题。
debugProfileBuildsEnabled = true在 DevTools Performance 时间线上启用 Widget 构建跟踪。精确追踪卡顿期间哪些 Widget 正在重建。
debugProfilePaintsEnabled = true在 DevTools Performance 时间线上启用绘制操作跟踪。捕获自定义画布上的高开销绘制操作。
示例配置
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() {
  // Toggle layout boundaries in debug mode
  debugPaintSizeEnabled = true;
  runApp(const MyApp());
}

自定义 Widget 诊断(debugFillProperties)

构建自定义 Widget、设计系统组件或参数复杂的有状态 Widget 时,重写 debugFillProperties,将内部状态变量显示在 Flutter Inspector 的 Details Tree 中。

诊断属性模式
  • 在 Widget 或 State 类中重写 debugFillProperties(DiagnosticPropertiesBuilder properties)。
  • 务必先调用 super.debugFillProperties(properties)。
  • 添加有类型的属性(IntProperty、DoubleProperty、StringProperty、FlagProperty、EnumProperty),使输出保持简洁且结构清晰。
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

class CustomButton extends StatelessWidget {
  final String label;
  final bool isLoading;
  final int badgeCount;

  const CustomButton({
    super.key,
    required this.label,
    this.isLoading = false,
    this.badgeCount = 0,
  });

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: isLoading ? null : () {},
      child: Text(label),
    );
  }

  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    
    // Add custom properties visible in Flutter Inspector
    properties.add(StringProperty('label', label));
    properties.add(FlagProperty('isLoading', value: isLoading, ifTrue: 'loading', ifFalse: 'ready'));
    properties.add(IntProperty('badgeCount', badgeCount, defaultValue: 0));
  }
}

性能与内存分析

Performance 标签页
  • 火焰图:显示 UI 线程和 Raster 线程的执行时间。查找横向延伸的函数,以定位执行瓶颈。
  • 帧时间预算:
    • 60Hz 显示屏:帧渲染时间 < 16.6ms。
    • 90Hz 显示屏:帧渲染时间 < 11.1ms。
    • 120Hz 显示屏:帧渲染时间 < 8.3ms。
Memory 标签页
  • 堆快照:在一个用户操作流程(例如打开/关闭屏幕)前后分别拍摄快照,检查内存是否恢复到基线。
  • 泄漏检测:查找屏幕关闭后仍留在堆中的未释放类、控制器或图像资源。

评论

支持 Markdown