Приостановить приложение Flutter в отладчике и дождаться нажатия в IntelliJ - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь отладить приложение Flutter в эмуляторе Android, останавливая его, нажимая на кнопку и ожидая, что отладчик переместит меня к обработчику событий кнопок onPressed, где я хочу пройтись по коду.

Когда я нажимаю кнопку, ничего не происходит, и отладчик не переключается с паузы на работу. Однако, если я возобновляю приложение после нажатия кнопки, обработчик события onPressed немедленно вызывается, поэтому очевидно, что нажатие на эмулятор регистрируется во время приостановки приложения.

Как я могу отлаживать свое приложение таким образом, вместо того, чтобы вручную находить правильный файл .dart и правильную кнопку и вставлять точку останова?

1 Ответ

1 голос
/ 25 июня 2019

К сожалению, вы не можете сделать именно это. Приостановка приложения препятствует выполнению цикла событий, и ваш обработчик кнопок не вызывается. Для приостановки любого вашего кода требуется новая функция, в которой IntelliJ может различать ваш код и код платформы и останавливаться на любом вызове вашего кода (даже в этом случае он должен игнорировать ваши build() функции). Самая близкая вещь, которую я мог найти в IntelliJ, это точки останова метода Java , которые не будут работать с 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.

...