我正在尝试通过以下方法来调试Android模拟器中的Flutter应用程序:暂停该应用程序,点击一个按钮,并期望调试器将我带到按钮onPressed
事件处理程序,在该事件处理程序中我要逐步执行代码。
当我点击按钮时,什么也没有发生,调试器也没有从暂停状态变为运行状态。但是,如果我在点击按钮后恢复应用程序,则会立即调用onPressed
事件处理程序,因此很明显,在应用程序暂停期间,模拟器正在拾取该点击。
如何以这种方式调试应用程序,而不是手动查找正确的.dart
文件和正确的按钮并插入断点?
答案 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
。