Timer snakeUpdateTimer;
...
set changingTimeValue(Duration duration) {
snakeUpdateTimer?.cancel();
snakeUpdateTimer = Timer(
duration,
() => snakeBloc.add(SnakeMoveEvent()),
);
}
...
RaisedButton(
child: Text("Click to reset Timer"),
onPressed: (){
changingTimeValue= Duration(seconds: 3);
},
)
When you assign Duration to changingTimeValue, it will cancel the old timer and creates new one.
If you also want to periodically reset the timer after timeout, then use
set changingTimeValue(Duration duration) {
snakeUpdateTimer?.cancel();
snakeUpdateTimer = Timer.periodic(
duration,
(timer) => snakeBloc.add(SnakeMoveEvent()),
//timer contains number of cycles finished(timer.tick)
);
}