CountdownTimer работает после окончания l oop во флаттере - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь создать приложение, которое требует обратного отсчета, чтобы показать пользователю, сколько времени осталось. Но l oop не работает, как я ожидал.

for(int i=0;i<widget.sets;i++)
      {
        while(j<5){
          CountdownTimer(Duration(seconds: 2), Duration(seconds: 1)).listen((data){
          })..onData((data){
            print(data.elapsed.inSeconds.toString());
          })..onDone((){
            print('onDone.........');
          });
          print('Hello');
          j++;
        }
        j=0;
        print((i+1).toString());
      }

Я получил этот вывод

флаттер: Привет флаттер: Привет флаттер: Привет флаттер: Привет флаттер: Привет флаттер: Привет флаттер: Привет флаттер: Привет флаттер: Привет флаттер : Привет флаттер: 1 флаттер: 1 флаттер: 1 флаттер: 1 флаттер: 1 флаттер: 1 1 флаттер: 1 флаттер: 1 флаттер: 1 флаттер: 2 флаттер: onDone ......... флаттер: 2 флаттер: onDone ......... флаттер: 2 флаттер: onDone ......... флаттер: 2 флаттер: onDone ......... флаттер: 2 флаттер: onDone .. ....... флаттер: 2 флаттер: onDone ......... флаттер: 2 флаттер: onDone ......... флаттер: 2 флаттер: onDone ....... .. флаттер: 2 флаттер: onDone ......... флаттер: 2 флаттер: onDone .........

ожидаемый результат:

flutter: 1
flutter: 4
flutter: 3
flutter: 4
flutter: 5
flutter: onDone.........
flutter: Hello
flutter: 1
flutter: 4
flutter: 3
flutter: 4
flutter: 5
flutter: onDone.........
flutter: Hello

И так далее. Как заставить этот код работать правильно?

1 Ответ

0 голосов
/ 03 мая 2020

Полагаю, это происходит потому, что все таймеры в вашем l oop создаются одновременно, поэтому каждую секунду они печатают одно и то же значение.

Возможно, вам следует использовать асинхронную приостановку в какой-то момент, что-то вроде await Future.delayed(Duration(seconds:1));

...