Выбор ответа Middle Тестирование обновлено

Flutter: pumpAndSettle зависает

Вопрос

На экране крутится CircularProgressIndicator, и await tester.pumpAndSettle() падает по тайм-ауту. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Бесконечная анимация индикатора никогда не «успокаивается», кадры планируются всегда. pumpAndSettle крутит кадры, пока есть запланированные, с ограничением по времени.

Варианты ответа

  1. pumpAndSettle нельзя вызывать после pumpWidget, только после действий пользователя
  2. Бесконечная анимация индикатора никогда не «успокаивается», кадры планируются всегдаправильный ответ
  3. Индикатору нужен реальный vsync устройства, которого в тестовом окружении нет
  4. Тест с анимациями должен быть объявлен как async*, иначе кадры не прокачиваются

Разбор

pumpAndSettle крутит кадры, пока есть запланированные, с ограничением по времени. Индикатор загрузки анимируется бесконечно и всё время планирует новый кадр. Решение: pump(const Duration(seconds: 1)) или подменить загрузку, чтобы данные пришли сразу. Ограничения на вызов после pumpWidget нет, vsync в тестах эмулируется, а async* здесь неуместен.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.