如何在 flutter CLI 中禁用小部件树打印(不小心按“T”键很烦人)

Meh*_*liz 18 terminal flutter

当我到达“R”进行热重载时,我不小心按下了终端中的“T”键,并且总是打印我的应用程序的小部件树,并且需要几分钟才能完成,所以这让我非常恼火。如果可能,我真的需要关闭此功能,但我不知道如何关闭。

Tre*_*ree 7

域名注册地址:

注释掉第 1285 - 1291 行

flutter/packages/flutter_tools/lib/src/resident_runner.dart

在本地 flutter git repo 中提交更改,“t”将被禁用。


这发生在里面

flutter/packages/flutter_tools/lib/src/resident_runner.dart

Future<bool> _commonTerminalInputHandler(String character)

方法。

在这里处理

case 't':
      case 'T':
        if (residentRunner.supportsServiceProtocol) {
          await residentRunner.debugDumpRenderTree();
          return true;
        }
        return false;
Run Code Online (Sandbox Code Playgroud)

supportsServiceProtocol如果应用程序处于调试或配置文件模式,则唯一的检查是否在getter 中返回 true。

如果该检查为真,则在 VirtualMachine 中调用该方法

  Future<Map<String, dynamic>> flutterDebugDumpRenderTree() {
    return invokeFlutterExtensionRpcRaw('ext.flutter.debugDumpRenderTree');
  }
Run Code Online (Sandbox Code Playgroud)

并处理输出。所以不幸的是,你不能在不更改颤振源代码的情况下禁用它。

幸运的是,更改 flutter 源代码非常容易。

进入内部flutter/packages/flutter_tools/lib/src/resident_runner.dart并注释掉您不想触发的案例。

      case 'S':
        if (residentRunner.supportsServiceProtocol) {
          await residentRunner.debugDumpSemanticsTreeInTraversalOrder();
          return true;
        }
        return false;
//      case 't':
//      case 'T':
//        if (residentRunner.supportsServiceProtocol) {
//          await residentRunner.debugDumpRenderTree();
//          return true;
//        }
//        return false;
Run Code Online (Sandbox Code Playgroud)

所以你已经成功地改变了颤振源。现在您需要重建颤振工具。

为此,您可以遵循开发人员文档

如果您想更改和重新测试工具本身的行为,请在 git 中本地提交您的工具更改,packages/flutter_tools下次运行 flutter 时,该工具将从 Dart 源重新构建。或者,删除该bin/cache/flutter_tools.snapshot文件。这样做将在您下次运行 flutter 时强制从您的本地源重新构建该工具。

简单来说,在 flutter root 中打开终端并提交您的更改。下次运行时,flutter run您将在终端中看到消息输出:

Building flutter tool...

当您要升级 flutter 时,运行git pull --rebase,您的更改将被保存。