Skip to content

Commit 1b8984e

Browse files
committed
fix(timer): prevent division by zero in progress calculation and sanitize negative settings input
1 parent 2ec7d45 commit 1b8984e

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

src/lib/features/note/viewmodel/focus_viewmodel.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class FocusViewModel extends ChangeNotifier {
151151
}
152152

153153
// Calculate progress for the circular indicator
154-
double get progress => timeRemaining / totalTime;
154+
double get progress => totalTime <= 0 ? 0.0 : (timeRemaining / totalTime).clamp(0.0, 1.0);
155155

156156
// --- TIMER OPERATIONS ---
157157

@@ -221,6 +221,11 @@ class FocusViewModel extends ChangeNotifier {
221221

222222
// Update preferences from the settings dialog
223223
void updateSettings({required int newPomodoroMinutes, required int newBreakMinutes, required bool vibrate, required int ringtone}) {
224+
if (newPomodoroMinutes <= 0 || newBreakMinutes <= 0) {
225+
debugPrint('Lỗi: Thời gian cài đặt phải lớn hơn 0 phút. Đã tự động set về 1.');
226+
newPomodoroMinutes = newPomodoroMinutes <= 0 ? 1 : newPomodoroMinutes;
227+
newBreakMinutes = newBreakMinutes <= 0 ? 1 : newBreakMinutes;
228+
}
224229
stopAlarm(); // Stop alarm if opening settings
225230
pomodoroTime = newPomodoroMinutes * 60;
226231
shortBreakTime = newBreakMinutes * 60;

0 commit comments

Comments
 (0)