123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import 'package:shared_preferences/shared_preferences.dart';
- /// A model class to store timer state data
- class TimerData {
- static const String _startTimeKey = 'timer_start_time';
- static const String _endTimeKey = 'timer_end_time';
- static const String _pausedRemainingKey = 'timer_paused_remaining';
- static const String _isRunningKey = 'timer_is_running';
- static const String _isPausedKey = 'timer_is_paused';
- // Timer start time in milliseconds since epoch
- final int? startTime;
-
- // Timer end time in milliseconds since epoch
- final int? endTime;
-
- // Remaining seconds when timer was paused
- final int? pausedRemaining;
-
- // Whether timer is currently running
- final bool isRunning;
-
- // Whether timer is currently paused
- final bool isPaused;
- TimerData({
- this.startTime,
- this.endTime,
- this.pausedRemaining,
- this.isRunning = false,
- this.isPaused = false,
- });
- /// Save timer data to SharedPreferences
- Future<void> save() async {
- final prefs = await SharedPreferences.getInstance();
-
- if (startTime != null) {
- await prefs.setInt(_startTimeKey, startTime!);
- } else {
- await prefs.remove(_startTimeKey);
- }
-
- if (endTime != null) {
- await prefs.setInt(_endTimeKey, endTime!);
- } else {
- await prefs.remove(_endTimeKey);
- }
-
- if (pausedRemaining != null) {
- await prefs.setInt(_pausedRemainingKey, pausedRemaining!);
- } else {
- await prefs.remove(_pausedRemainingKey);
- }
-
- await prefs.setBool(_isRunningKey, isRunning);
- await prefs.setBool(_isPausedKey, isPaused);
- }
- /// Load timer data from SharedPreferences
- static Future<TimerData> load() async {
- final prefs = await SharedPreferences.getInstance();
-
- return TimerData(
- startTime: prefs.containsKey(_startTimeKey) ? prefs.getInt(_startTimeKey) : null,
- endTime: prefs.containsKey(_endTimeKey) ? prefs.getInt(_endTimeKey) : null,
- pausedRemaining: prefs.containsKey(_pausedRemainingKey) ? prefs.getInt(_pausedRemainingKey) : null,
- isRunning: prefs.getBool(_isRunningKey) ?? false,
- isPaused: prefs.getBool(_isPausedKey) ?? false,
- );
- }
- /// Calculate remaining seconds based on current time and end time
- int calculateRemainingSeconds() {
- if (isPaused && pausedRemaining != null) {
- return pausedRemaining!;
- }
-
- if (endTime != null) {
- final now = DateTime.now().millisecondsSinceEpoch;
- final remaining = (endTime! - now) ~/ 1000;
- return remaining > 0 ? remaining : 0;
- }
-
- return 0;
- }
- /// Create a copy of this timer data with modified properties
- TimerData copyWith({
- int? startTime,
- int? endTime,
- int? pausedRemaining,
- bool? isRunning,
- bool? isPaused,
- }) {
- return TimerData(
- startTime: startTime ?? this.startTime,
- endTime: endTime ?? this.endTime,
- pausedRemaining: pausedRemaining ?? this.pausedRemaining,
- isRunning: isRunning ?? this.isRunning,
- isPaused: isPaused ?? this.isPaused,
- );
- }
- }
|