A timer library that provides controls (play, pause, restart, etc) and widgets to consume the timer value.
In the pubspec.yaml
of your flutter project, add the following dependency:
dependencies:
...
timer_controller: ^0.1.0
In your library add the following import:
import 'package:timer_controller/timer_controller.dart';
The TimerController
extends ValueNotifier
, so you can access his value
which represents the information of the timer.
You can use different constructors depending on the available units :
final TimerController secondsTimer = TimerController.seconds(15);
final TimerController minutesTimer = TimerController.minutes(3);
final TimerController hoursTimer = TimerController.hours(2);
Note : Remember to dispose the TimerController
when it is no longer needed.
start()
: Start the timer.
pause()
: Pause the timer.
reset()
: Reset the timer to the initial value.
restart()
: Reset the timer to the initial value and start it again.
The TimerValue
represents the state of the timer and has some properties that you can use.
TimerValue({
/// The amount of `unit` that remains.
required int remaining,
/// The unit of the timer.
required TimerUnit unit,
/// The status of the timer.
TimerStatus status = TimerStatus.initial,
});
The timer_controller
comes with built-in widgets to build widgets or to call actions depending on the controller.
To build a widget depending on the value
of the TimerController
, you can use the TimerControllerBuilder
:
TimerControllerBuilder(
controller: myTimerController,
builder: (context, value, child) {
// return widget here based on myTimerController
}
)
Note: If you want fine-grained control over when the builder function is called you can provide an optional condition to TimerControllerBuilder. The condition takes the previous timer value and current timer value and returns a boolean. If condition returns true, builder will be called with value and the widget will rebuild. If condition returns false, builder will not be called and no rebuild will occur.
To run an action depending on the value
of the TimerController
, you can use the TimerControllerBuilder
:
TimerControllerListener(
controller: myTimerController,
listener: (context, value) {
// do stuff here based on myTimerController value
},
child: Container(),
)
Note: If you want fine-grained control over when the listener function is called you can provide an optional condition to TimerControllerListener. The condition takes the previous timer value and current timer value and returns a boolean. If condition returns true, listener will be called with value. If condition returns false, listener will not be called.
You can find an example of this package here.
If you find a bug or want a feature, but don't know how to fix/implement it, please fill an issue. If you fixed a bug or implemented a feature, please send a pull request.