Не могу ввести текст в тесте флаттера - PullRequest
0 голосов
/ 26 апреля 2018

Я пытался проверить элемент, который при нажатии IconButton, объект Text изменяется на TextFormField.Когда я пытаюсь проверить это, я получаю следующую ошибку:

A Timer is still pending even after the widget tree was disposed.
'package:flutter_test/src/binding.dart': Failed assertion: line 672 pos 7:
'_fakeAsync.nonPeriodicTimerCount == 0'

Несмотря на то, что виджет не использует таймеры, о которых я знаю?

Пример кода:

await tester.tap(find.byType(IconButton));
await tester.pump();

expect(find.byType(TextFormField), findsOneWidget);
await tester.pump();
await tester.enterText(find.byType(EditableText), "0.2");

Я действительно не уверен, что является причиной проблемы, но если я удаляю последние 2 строки, она работает нормально (хотя я не могу проверить мои данные).

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Проблема заключалась в том, что используемое текстовое поле имело задержку в 300 мс, так что клавиатура могла прокручивать изображение, а затем приложение могло прокручивать текстовое поле.Я полностью проигнорировал, что текстовое поле имеет эту задержку и не учитывает ее.

Добавление

await tester.pump(Duration(milliseconds:400));

работало точно так, как предполагалось.

0 голосов
/ 26 апреля 2018

Назначьте Ключ Для EditableText

new EditableText(
  key: new Key('mySpecialEditableText1234'),
  controller: myCtrl,
  style: myStyle,
  focusNode: myFocusNode,
)

и получите доступ к этому виджету в своем тесте как:

find.byKey(new Key('mySpecialEditableText1234'))

Если это не находит ваш виджет,ваш экземпляр tester, вероятно, не качает правильный виджет

ПРИМЕЧАНИЕ : убедитесь, что вы идете по правильному пути навигации.Вы не можете напрямую качать виджет, который не является первым в дереве

...