timer_flutter
A versatile and developer-friendly Flutter package for creating and managing timers based on current DateTime. A timer with multiple listeners, synchronized with the current time. It supports millisecond updates, progress tracking (0 to 1)
, formatted time output, and timer status
monitoring, circular timer widgets circular progress
and pie
. As well as time ago
and time left
.
Timer Listeners
-
statusListener
: timer status listenernotStartedYet
,started
,ended
,reset
,clear
-
timeListener
: formatted time listenerHH:MM:SS:ms
-
millisecondsListener
: timer listener value in milliseconds -
progress0to1Listener
: timer progress0 to 1
listener
Timer Controller
TimerFController controller = TimerFController();
-
controller.reset()
-
controller.pause()
-
controller.resume()
-
controller.clear()
-
controller.dispose()
-
controller.controller.stream
: listen formatted time using StreamBuilder
Get Time Ago/Left
Time Ago
final DateTime pastDateTime = DateTime.parse('2024-08-27 23:31:15.000');
String timeagoStr = TimeF.timeAgo(pastDateTime, formate: TimeAgoFormate(second: "## sec'# ago", week: "## week'# ago"),
listenerDateTimeF: (dtf) {
log(" Ago DateTimeF Listener: ${dtf.toString()}"); // Ago DateTimeF Listener: DateTimeF(year: 0, month: 2, week: 3, day: 3, hour: 1, minute: 1, second: 10)
});
log(timeagoStr); // 2 months ago
Time Left
final DateTime futureDateTime = DateTime.parse('2024-11-26 23:31:15.000');
String timeExpireStr = TimeF.timeLeft(futureDateTime, formate: TimeLeftFormate(hour: "Offer expire in ## hour'#", day: "Offer expire in ## day'#"),
listenerDateTimeF: (dtf) {
log("Left DateTimeF Listener: ${dtf.toString()}"); // Left DateTimeF Listener: DateTimeF(year: 0, month: 0, week: 0, day: 6, hour: 22, minute: 58, second: 49)
});
log(timeExpireStr); // Offer expire in 6 days
Formate
hour: "Offer expire in ## hour'#", // Result: Offer expire in 8 hours
month: "updated ## month'# ago", // Result: updated last 1 month ago
Examples
late TimerFController _timerFController;
_timerFController = TimerFController(
startTime: DateTime.now().add(
const Duration(seconds: 18)), // --timer will be start after `18 sec`
duration: const Duration(minutes: 8),
timeFormate: "MM:SS:ms",
listeningDelay: const Duration(milliseconds: 50),
statusListener: (status) {
log("timer: --status: $status");
},
isCountdown: true,
millisecondsListener: (pms) {
log("timer: --ms: $pms");
},
progress0to1Listener: (progress) {
log("timer: --progress: $progress");
},
timeListener: (value) {
log("timer: --time: $value");
},
);
_timerFController.dispose();
StreamBuilder<String>(
stream: _timerFController.controller.stream,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data ?? '',
style: const TextStyle(color: Colors.black));
} else {
return const Text("not started",
style: TextStyle(color: Colors.black));
}
}
),
Circular progress
and pie
type timer widget builder
FlutterCircularProgressTimer(
isPieShape: false,
timerControllerValues: TimerControllerValues(
listeningDelay: const Duration(milliseconds: 100),
timeFormate: "MM:SS",
isCountdown: true,
duration: const Duration(minutes: 5),
statusListener: (status) {
log("Timer status: $status");
},
controller: (controller) {
timerFController = controller;
}),
radius: 60,
decoraton: CircularTimerDecoraton(
fillColor: Colors.transparent,
progressBackgroundColor: Colors.grey.withAlpha((255.0 * 0.2).round()),
prgressThickness: 12,
progressMaskFilter:
const MaskFilter.blur(BlurStyle.inner, 11.5),
progressColors: const [Colors.blue],
// progressShadow: ProgressShadow(
// color: Colors.red, opacity: 0.5, blur: 9.8, spreadRadius: 18),
),
builder: (BuildContext context, value, progress) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
value ?? '',
style: const TextStyle(
fontSize: 38,
color: Colors.black,
fontWeight: FontWeight.w300,
),
),
const Text(
"minutes",
style: TextStyle(
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.w800,
),
),
],
);
},
),