56 lines
1.3 KiB
Dart
56 lines
1.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
enum CalendarViewType { day, month }
|
|
|
|
class CalendarState {
|
|
final CalendarViewType viewType;
|
|
final DateTime selectedDate;
|
|
|
|
CalendarState({required this.viewType, required this.selectedDate});
|
|
|
|
CalendarState copyWith({CalendarViewType? viewType, DateTime? selectedDate}) {
|
|
return CalendarState(
|
|
viewType: viewType ?? this.viewType,
|
|
selectedDate: selectedDate ?? this.selectedDate,
|
|
);
|
|
}
|
|
}
|
|
|
|
class CalendarStateManager extends ChangeNotifier {
|
|
CalendarState _state;
|
|
|
|
CalendarStateManager()
|
|
: _state = CalendarState(
|
|
viewType: CalendarViewType.month,
|
|
selectedDate: DateTime.now(),
|
|
);
|
|
|
|
CalendarState get state => _state;
|
|
|
|
CalendarViewType get viewType => _state.viewType;
|
|
DateTime get selectedDate => _state.selectedDate;
|
|
|
|
void setViewType(CalendarViewType type) {
|
|
_state = _state.copyWith(viewType: type);
|
|
notifyListeners();
|
|
}
|
|
|
|
void setSelectedDate(DateTime date) {
|
|
_state = _state.copyWith(selectedDate: date);
|
|
notifyListeners();
|
|
}
|
|
|
|
void resetToToday() {
|
|
final now = DateTime.now();
|
|
_state = CalendarState(
|
|
viewType: CalendarViewType.month,
|
|
selectedDate: DateTime(now.year, now.month, now.day),
|
|
);
|
|
notifyListeners();
|
|
}
|
|
|
|
void refresh() {
|
|
notifyListeners();
|
|
}
|
|
}
|