暂停调试器中的Flutter应用并等待IntelliJ中的点击

时间:2019-06-25 07:44:42

标签: debugging intellij-idea flutter dart

我正在尝试通过以下方法来调试Android模拟器中的Flutter应用程序:暂停该应用程序,点击一个按钮,并期望调试器将我带到按钮onPressed事件处理程序,在该事件处理程序中我要逐步执行代码。

当我点击按钮时,什么也没有发生,调试器也没有从暂停状态变为运行状态。但是,如果我在点击按钮后恢复应用程序,则会立即调用onPressed事件处理程序,因此很明显,在应用程序暂停期间,模拟器正在拾取该点击。

如何以这种方式调试应用程序,而不是手动查找正确的.dart文件和正确的按钮并插入断点?

1 个答案:

答案 0 :(得分:1)

很遗憾,您不能完全做到这一点。暂停应用会阻止事件循环执行,并且不会调用您的按钮处理程序。使它在您的任何代码中暂停都需要一项新功能,IntelliJ可以在该功能中区分您的代码和框架代码,并在任何代码调用时停止(即使如此,它也应忽略您的build()函数)。我在IntelliJ中找到的最接近的东西是Java method breakpoints,它不适用于Dart。

但是,您可以执行以下操作:您可以在onPressed的调用方中设置一个断点,这将在您按下任何按钮时暂停您的应用程序。在这里可以放置该断点:

// This is Line 504 of flutter/lib/src/material/ink_well.dart
// Ctrl+click on button to go into the framework code 
// and find this file in project explorer
  void _handleTap(BuildContext context) {
    _currentSplash?.confirm();
    _currentSplash = null;
    updateHighlight(false);
    if (widget.onTap != null) {
      if (widget.enableFeedback)
        Feedback.forTap(context);
      widget.onTap(); // <---PLACE BREAKPOINT HERE
    }
  }

一旦达到此断点,请单击几次以进入(F7),您应该进入onPressed