TimeBuilder.countdown constructor
TimeBuilder.countdown({
- Key? key,
- required DateTime start,
- required int seconds,
- required CountdownWidgetBuilder builder,
Creates a countdown, from the given start DateTime.
Will call the builder, which is a CountdownWidgetBuilder, once per second,
util the countdown reaches zero.
TimerWidget.countdown(
reference: DateTime.now(),
builder: (BuildContext context, int seconds, bool isFinished) => ...;
)
Implementation
factory TimeBuilder.countdown({
Key? key,
required DateTime start,
required int seconds,
required CountdownWidgetBuilder builder,
}) {
return TimeBuilder(
//
key: key,
//
ifShouldTickAndRebuild: ({
required DateTime currentTime,
required DateTime? lastTickTime,
required DateTime initialTime,
required int ticks,
}) {
return (lastTickTime == null || (currentTime.second != lastTickTime.second));
},
//
isFinished: ({
required DateTime currentTime,
required DateTime? lastTickTime,
required DateTime initialTime,
required int ticks,
}) {
if (lastTickTime != null && (currentTime.second == lastTickTime.second))
return false;
int _seconds =
(start.add(Duration(seconds: seconds))).difference(currentTime).inSeconds;
return _seconds <= 0;
},
builder: ({
required BuildContext context,
/// The time of the current tick.
/// This is the same as the current time (or very similar).
required DateTime currentTickTime,
/// The time when the [TimeBuilder] was created.
required DateTime initialTime,
/// The number of ticks since the timer started.
required int ticks,
/// This is `false` while the [TimeBuilder] is ticking,
/// and becomes `true` as soon as it finishes.
required bool isFinished,
}) {
int _seconds =
(start.add(Duration(seconds: seconds))).difference(clock.now()).inSeconds;
return builder(
context: context,
currentTickTime: clock.now(),
initialTime: initialTime,
ticks: ticks,
isFinished: isFinished,
countdown: _seconds,
);
},
//
);
}