Флаттер: как слушать изменения int? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь запустить функцию таймера, и когда значение таймера достигло определенного значения, мне нужно запустить другую функцию. поэтому мне нужно прослушать изменение значения в int start


import 'dart:async';


class CustomTimer{

  Timer _timer;
  int start = 0;


  void  startTimer(){
    const oneSec = Duration(seconds: 1);

    _timer = Timer.periodic(oneSec, (Timer timer){
      start++;
      print('start value $start');
    });
  }

  void cancelTimer()
  {
    _timer.cancel();
  }

}

Я вызываю эту функцию из другого класса, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Вы должны быть реализованы следующим образом

class CustomTimer {

  Timer _timer;
  int start = 0;
  StreamController streamController;

  void startTimer() {
    const oneSec = Duration(seconds: 1);
    streamController = new StreamController<int>();
    _timer = Timer.periodic(oneSec, (Timer timer) {
      start++;
      streamController.sink.add(start);
      print('start value $start');
    });
  }

  void cancelTimer() {
    streamController.close();
    _timer.cancel();
  }

}

Другой класс, когда вы слушаете обновленное значение

class _EditEventState extends State<EditEvent> {

  CustomTimer customTimer = new CustomTimer();



  @override
  void initState() {
    customTimer.startTimer();
    customTimer.streamController.stream.listen((data) {
      print("listen value- $data");
    });

  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Container()

    );
  }


 @override
  void dispose() {
    customTimer.cancelTimer();
    super.dispose();
  }
}

Здесь я создал в streambuilder для прослушивания значение int

1 голос
/ 08 ноября 2019

int не похож на слушателя. Но вы можете проверить ваше событие внутри вашего регулятора, называемого функцией таймера, а затем запустить отправленный метод:

import 'dart:async';

class CustomTimer{

  Timer _timer;
  int start = 0;
  Function callback;

  void  startTimer(Function callback, int triggerValue){
    const oneSec = Duration(seconds: 1);

    _timer = Timer.periodic(oneSec, (Timer timer){
      start++;
      print('start value $start');

      if (start >= triggerValue)
        callback();
    });
  }

  void cancelTimer()
  {
    _timer.cancel();
  }

}

Вы можете вызвать его с помощью этого:

CustomTimer timer = CustomTimer();
timer.startTimer(10, () {
  print('timer has reached the submitted value');
  timer.cancelTimer();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...