focus-flow/apps/focus_flow_flutter/lib/controllers/selected_date_controller.dart

44 lines
1.2 KiB
Dart

// SPDX-FileCopyrightText: 2026 FocusFlow contributors
// SPDX-License-Identifier: AGPL-3.0-only
/// Coordinates selected planning date state for FocusFlow.
library;
import 'package:flutter/foundation.dart';
import 'package:scheduler_core/scheduler_core.dart';
/// Reads the currently selected owner-local planning date.
typedef SelectedDateReader = CivilDate Function();
/// Owns the visible owner-local planning day.
class SelectedDateController extends ChangeNotifier {
/// Creates a selected-date controller initialized to [initialDate].
SelectedDateController({required CivilDate initialDate})
: _date = initialDate;
/// Private state storing the currently selected date.
CivilDate _date;
/// Current visible owner-local planning date.
CivilDate get date => _date;
/// Selects [date] as the visible planning day.
bool selectDate(CivilDate date) {
if (date == _date) {
return false;
}
_date = date;
notifyListeners();
return true;
}
/// Moves the selected planning day backward by one civil day.
bool selectPreviousDay() {
return selectDate(_date.addDays(-1));
}
/// Moves the selected planning day forward by one civil day.
bool selectNextDay() {
return selectDate(_date.addDays(1));
}
}