datetime_loop
一個 Flutter 套件,提供一個用於監聽系統日期時間並根據指定的時間單位觸發重建的 widget。
一個 Flutter 套件,提供一個用於監聽系統日期時間並根據指定的時間單位觸發重建的 widget。
{"sdk":"flutter"}{"sdk":"flutter"}^2.0.0^1.3.3以下為英文專案原文快照,最新內容請造訪 GitHub。
Buy Me A Coffee
Pub
BSD 3-Clause License
Pub
Pub likes
Download
Pub points
A Flutter package that provides a widget to listen to the system's datetime and trigger a rebuild based on the specified time unit
Support the project by giving the repo a ⭐ and showing some ❤️!
Import the package in your Dart code:
import 'package:datetime_loop/datetime_loop.dart';
DateTimeLoopBuilderUse the DateTimeLoopBuilder widget to rebuild UI elements based on system time updates. You can provide a timeUnit for simple setups or a custom DateTimeLoopController for advanced control (e.g., pause/resume):
DateTimeLoopBuilder(
timeUnit: TimeUnit.seconds,
builder: (context, dateTime, child) {
return Column(
children: [
Container(
width: 200,
height: 200,
color: Color((math.Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0),
),
Text('$dateTime'),
],
);
}
)
DateTimeLoopControllerThe DateTimeLoopController provides a stream of datetime updates and supports advanced features like pausing and resuming updates, useful for optimizing resource usage (e.g., when the app is backgrounded):
final controller = DateTimeLoopController(timeUnit: TimeUnit.minutes);
controller.dateTimeStream.listen((dateTime) {
print('Current time: $dateTime');
});
// Pause updates to save resources
controller.pause();
// Resume updates with an immediate trigger
controller.resume(triggerImmediate: true);
// Use the controller with DateTimeLoopBuilder
DateTimeLoopBuilder(
controller: controller,
builder: (context, dateTime, child) {
return Text('Time: ${dateTime.toString().split('.').first}');
},
);
// Dispose of the controller when done
controller.dispose();
getNowBoth DateTimeLoopBuilder and DateTimeLoopController support a getNow parameter that allows you to mock the system time. This is particularly useful for testing and simulating different time scenarios:
// Example: Testing with a mocked time
DateTime customTime = DateTime(2025, 10, 31, 12, 0, 0);
DateTimeLoopBuilder(
timeUnit: TimeUnit.seconds,
getNow: () => customTime,
builder: (context, dateTime, child) {
return Text('Mocked time: $dateTime');
},
)
// Example: Using getNow with DateTimeLoopController
final controller = DateTimeLoopController(
timeUnit: TimeUnit.minutes,
getNow: () => customTime,
);
This feature enables:
You can check more examples of using this widget here
Please file any issues or feedback here.