Search packages, repositories and app categories

Package detailsv1.6.0

datetime_loop

A Flutter package that provides a widget to listen to the system's datetime and trigger a rebuild based on the specified time unit.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
274
Likes
11
Pub points
160

Install package

flutter pub add datetime_loop

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

The datetime_loop package is a Flutter utility that offers a widget to monitor the system's current date and time, triggering rebuilds based on configurable time intervals such as seconds, minutes, or hours. It simplifies real-time updates in UIs requiring dynamic time-based content, like clocks, countdowns, or live data displays. The widget efficiently listens to system time changes without unnecessary overhead, ensuring smooth performance across platforms. Ideal for applications needing periodic refreshes tied to time progression.

Use cases

  • Real-time clock displays
  • Countdown timers
  • Live data updates
  • Time-based UI refreshes
  • Dynamic content scheduling

Key features

  • Rebuilds on specified time intervals
  • Efficient system time listening
  • Cross-platform support
  • Configurable time units
  • Minimal performance impact

Suitable for

  • Apps with time-dependent UIs
  • Developers needing lightweight time listeners
  • Projects requiring frequent UI updates
  • Clock or timer applications
  • Real-time dashboards

Considerations

  • May cause excessive rebuilds if interval is too short
  • Requires careful handling of state in complex widgets
  • Not ideal for long-running background tasks
  • Best used with immutable or lightweight UI components
  • Limited to UI-level time monitoring

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

Clock Example

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 ❤️!

Usage

Import the package in your Dart code:

import 'package:datetime_loop/datetime_loop.dart';
Using DateTimeLoopBuilder

Use 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'),
      ],
    );
  }
)
Using DateTimeLoopController

The 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();
Testing with getNow

Both 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:

  • Unit Testing: Write deterministic tests by controlling the datetime value
  • Time Simulation: Simulate different time scenarios without waiting for real time to pass
  • Debugging: Test edge cases and time-dependent behavior

You can check more examples of using this widget here

Issues and Feedback

Please file any issues or feedback here.

Categories

Source repository

Projects using this package

No data available yet.