Я новичок в Dart / Flutter и хотел бы создать простое приложение, в котором LinearProgressBar обновляется каждую секунду.
Не вдаваясь в фактический код, у меня работает следующая настройка.
- Функция, которая вычисляет прогресс на основе прошедшего времени.
- LinearProgressBar, показывающий прогресс.
- Периодический таймер, пересчитывающий прогресс и обновляющий индикатор выполнения каждую секунду.
- Я каждый раз отлаживаю галочку, пересчет сделан.
Все работает как положено, за одним исключением. «Галочка» продолжает печататься, когда я перемещаю приложение в фоновый режим на своем устройстве Android.
На родном Android я бы отменил свой периодический таймер при срабатывании события onPause.
Во Flutter есть что-то подобное? Все, что я смог найти, это «initState» и «dispose». Однако Dispose не вызывается при перемещении приложения в фоновый режим.
Я не хочу, чтобы таймер продолжал работать в фоновом режиме.
В своем исследовании я нашел этот вопрос о переполнении стека onresume-and-onpause-for- виджеты-на-флаттере. В ответе предлагается использовать TickerProviderStateMixin.
Я использовал это следующим образом.
class _BarItemState extends State<BarItem> with SingleTickerProviderStateMixin {
Ticker ticker;
num progress = 1.0;
@override
void initState() {
super.initState();
ticker = createTicker((duration) => setState(() {
debugPrint('tick');
progress = duration.inSeconds / 30;
}))
..start();
}
// other stuff omitted
}
Он работает, но я все еще недоволен.
Причина в том, что обратный вызов тикера теперь вызывается каждые несколько миллисекунд, а не раз в секунду. Мне это кажется пустой тратой ресурсов (мне не нужна плавная анимация), ... я что-то слишком усложняю?
Даже если кажется, что мне это не нужно для моего варианта использования, я все равно хотел бы знать:
Как самостоятельно обрабатывать события onPause / onResume?