FlutterDriver - как закрыть showDialog

Я работаю с FlutterDriver, у меня определен IconButton и набор ключей, как показано:

Center(
  child: IconButton(
    key: Key('moredots'),
    icon: Icon(Icons.more_vert),
    onPressed: () {
      showDialog(
        context: context,
        builder: (_) => tableConfig,        
      );
    },
  ),
)

Диалог успешно отображается со следующим кодом:

await driver.tap(find.byValueKey('moredots'));

Я не могу понять, как закрыть диалог. Я пробовал:

  • Нажав на то же значение, что показано выше
  • Добавление ключа в Scaffold, поиск ключа и нажатие
  • Добавление ключей в другие элементы пользовательского интерфейса в иерархии, поиск и нажатие

Я получаю следующее сообщение об ошибке:

FlutterDriver: сообщение нажатия занимает много времени ...


person John Muchow    schedule 05.11.2019    source источник


Ответы (2)


Я понял, что showDialog () представляет ModalBarrier, чтобы остановить ввод данных пользователем, пока отображается диалоговое окно.

Уловка для закрытия showDialog заключается в поиске путем передачи типа в ModalBarrier, как показано здесь:

await driver.tap(find.byType('ModalBarrier'));
person John Muchow    schedule 06.11.2019
comment
У меня не работает с Flutter 1.17.5. Какую версию вы используете? - person tomrozb; 13.08.2020

Добавлять

Navigator.of(context).pop(false);

после

await driver.tap(find.byValueKey('moredots'));

person pauloamaral93    schedule 05.11.2019
comment
что делает .pop(false)? - person alter123; 05.11.2019
comment
Вам не нужно false, но это возвращаемое значение при закрытии диалога. - person pauloamaral93; 05.11.2019
comment
Спасибо за ввод, однако этот ответ не будет работать, интеграционные тесты с FlutterDriver не могут иметь код пользовательского интерфейса Flutter. - person John Muchow; 05.11.2019