更新
This commit is contained in:
59
lib/controller/date/CalendarController.dart
Normal file
59
lib/controller/date/CalendarController.dart
Normal file
@@ -0,0 +1,59 @@
|
||||
import 'package:ef/ef.dart';
|
||||
|
||||
class CalendarController extends GetControllerEx {
|
||||
Rx<DateTime> displayedMonth = DateTime.now().obs;
|
||||
Rx<DateTime?> selectedDate = Rx<DateTime?>(null);
|
||||
|
||||
List<DateTime> getDaysInMonth() {
|
||||
DateTime firstDayOfMonth =
|
||||
DateTime(displayedMonth.value.year, displayedMonth.value.month, 1);
|
||||
DateTime lastDayOfMonth =
|
||||
DateTime(displayedMonth.value.year, displayedMonth.value.month + 1, 0);
|
||||
List<DateTime> days = [];
|
||||
|
||||
for (int i = 0; i < lastDayOfMonth.day; i++) {
|
||||
days.add(firstDayOfMonth.add(Duration(days: i)));
|
||||
}
|
||||
return days;
|
||||
}
|
||||
|
||||
List<List<DateTime>> getCalendarRows(List<DateTime> daysInMonth) {
|
||||
List<List<DateTime>> calendarRows = [];
|
||||
int firstWeekday = daysInMonth.first.weekday;
|
||||
int emptyDays = (firstWeekday == 7 ? 6 : firstWeekday - 1);
|
||||
|
||||
List<DateTime> row = [];
|
||||
for (int i = 0; i < emptyDays; i++) {
|
||||
row.add(DateTime(0));
|
||||
}
|
||||
|
||||
for (var day in daysInMonth) {
|
||||
row.add(day);
|
||||
if (row.length == 7) {
|
||||
calendarRows.add(List.from(row));
|
||||
row.clear();
|
||||
}
|
||||
}
|
||||
if (row.isNotEmpty) {
|
||||
while (row.length < 7) {
|
||||
row.add(DateTime(0));
|
||||
}
|
||||
calendarRows.add(List.from(row));
|
||||
}
|
||||
return calendarRows;
|
||||
}
|
||||
|
||||
void previousMonth() {
|
||||
displayedMonth.value =
|
||||
DateTime(displayedMonth.value.year, displayedMonth.value.month - 1, 1);
|
||||
}
|
||||
|
||||
void nextMonth() {
|
||||
displayedMonth.value =
|
||||
DateTime(displayedMonth.value.year, displayedMonth.value.month + 1, 1);
|
||||
}
|
||||
|
||||
void selectDate(DateTime date) {
|
||||
selectedDate.value = date;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user