212 lines
6.0 KiB
Dart
212 lines
6.0 KiB
Dart
import 'dart:core';
|
|
|
|
|
|
/*class CalendarListPage extends StatefulWidget with NavigationDrawerItem {
|
|
|
|
final String title = 'Termine';
|
|
|
|
@override
|
|
State<StatefulWidget> createState() => CalendarListPageState();
|
|
}
|
|
|
|
class CalendarListPageState extends State<CalendarListPage> {
|
|
List _selectedDayList = [];
|
|
Map<DateTime, List<EventModel>> _events = {};
|
|
CalendarController? _calendarController;
|
|
|
|
@override
|
|
void dispose() {
|
|
_calendarController!.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_calendarController = CalendarController();
|
|
init();
|
|
}
|
|
|
|
void init() async {
|
|
EventController.getEventListStream().forEach((events) {
|
|
setState(() {
|
|
_events = _mapListToCalendarEvents(events);
|
|
_selectedDayList = events
|
|
.where((e) =>
|
|
DateTime(e.schedule.startTime.year, e.schedule.startTime.month, e.schedule.startTime.day) ==
|
|
DateTime(
|
|
_calendarController!.selectedDay.year,
|
|
_calendarController!.selectedDay.month,
|
|
_calendarController!.selectedDay.day))
|
|
.toList();
|
|
});
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) => SafeArea(
|
|
bottom: false,
|
|
child: Padding(
|
|
padding: const EdgeInsets.fromLTRB(UIShapes.paddingSimple,
|
|
UIShapes.paddingSimple, UIShapes.paddingSimple, 0),
|
|
child: ListView(
|
|
primary: true,
|
|
children: <Widget>[
|
|
FormattedCalendar(_events, _calendarController!, _onDaySelected),
|
|
ColumnExtension.builder(
|
|
itemCount: _selectedDayList.length,
|
|
itemBuilder: (context, index) =>
|
|
CalendarListTile(_selectedDayList[index]),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
|
|
void _onDaySelected(DateTime dateTime, List list, List list2) {
|
|
setState(() {
|
|
_selectedDayList = list.isEmpty ? [] : list;
|
|
});
|
|
}
|
|
|
|
Map<DateTime, List<EventModel>> _mapListToCalendarEvents(List<EventModel> list) {
|
|
final map = <DateTime, List<EventModel>>{};
|
|
DateTime dateKey;
|
|
int i;
|
|
int j;
|
|
for (final e in list) {
|
|
j = 0;
|
|
dateKey = e.schedule.startTime;
|
|
do {
|
|
if (e.schedule.frequency != Frequency.once && e.schedule.interval != null) {
|
|
if (e.schedule.frequency == Frequency.days) {
|
|
dateKey = dateKey.add(Duration(days: e.schedule.interval!));
|
|
} else if (e.schedule.frequency == Frequency.weeks) {
|
|
dateKey = dateKey.add(Duration(days: 7 * e.schedule.interval!));
|
|
} else if (e.schedule.frequency == Frequency.months) {
|
|
dateKey = dateKey =
|
|
DateTime(dateKey.year, dateKey.month + e.schedule.interval!, dateKey.day);
|
|
}
|
|
if (e.schedule.until != null && e.schedule.until!.isBefore(dateKey)) {
|
|
break;
|
|
}
|
|
}
|
|
i = 0;
|
|
do {
|
|
var dateKey2 = dateKey.add(Duration(days: i));
|
|
dateKey2 = DateTime(dateKey2.year, dateKey2.month, dateKey2.day);
|
|
if (map.containsKey(dateKey2)) {
|
|
map[dateKey2]!.add(e);
|
|
} else {
|
|
map[dateKey2] = [e];
|
|
}
|
|
i++;
|
|
} while (i < e.schedule.endTime.difference(e.schedule.startTime).inDays);
|
|
j++;
|
|
} while (e.schedule.frequency != Frequency.once && e.schedule.interval != null && j < 52);
|
|
}
|
|
return map;
|
|
}
|
|
}
|
|
|
|
class FormattedCalendar extends StatelessWidget {
|
|
final Map<DateTime, List> _events;
|
|
final CalendarController _controller;
|
|
final void Function(DateTime, List, List) _onDaySelected;
|
|
|
|
const FormattedCalendar(this._events, this._controller, this._onDaySelected);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final defaultCalendar = TableCalendar(
|
|
calendarController: CalendarController(),
|
|
);
|
|
final calendar = TableCalendar(
|
|
locale: 'de_DE',
|
|
availableCalendarFormats: const {
|
|
CalendarFormat.month: 'Month',
|
|
},
|
|
headerStyle: HeaderStyle(
|
|
centerHeaderTitle: true,
|
|
titleTextBuilder: (date, locale) =>
|
|
'${getMonthName(date.month)} ${date.year.toString()}'.toUpperCase(),
|
|
titleTextStyle: UITheme.theme.textTheme.headline5,
|
|
),
|
|
daysOfWeekStyle: DaysOfWeekStyle(
|
|
weekendStyle: defaultCalendar.daysOfWeekStyle.weekdayStyle,
|
|
dowTextBuilder: (date, locale) =>
|
|
getDayName(date.weekday).toUpperCase(),
|
|
),
|
|
startingDayOfWeek: StartingDayOfWeek.monday,
|
|
calendarStyle: CalendarStyle(
|
|
outsideWeekendStyle: defaultCalendar.calendarStyle.outsideStyle,
|
|
weekendStyle: defaultCalendar.calendarStyle.weekdayStyle
|
|
.apply(color: UIColors.grey5),
|
|
weekdayStyle: defaultCalendar.calendarStyle.weekdayStyle
|
|
.apply(color: UIColors.grey5),
|
|
eventDayStyle: defaultCalendar.calendarStyle.weekdayStyle
|
|
.apply(color: UIColors.grey5,),
|
|
todayColor: UIColors.grey3,
|
|
selectedColor: UIColors.grey5,
|
|
markersColor: Color(0xFFFFD445),
|
|
),
|
|
events: _events,
|
|
calendarController: _controller,
|
|
onDaySelected: _onDaySelected,
|
|
);
|
|
return calendar;
|
|
}
|
|
|
|
static String getMonthName(int month) {
|
|
switch (month) {
|
|
case 1:
|
|
return 'Januar';
|
|
case 2:
|
|
return 'Februar';
|
|
case 3:
|
|
return 'März';
|
|
case 4:
|
|
return 'April';
|
|
case 5:
|
|
return 'Mai';
|
|
case 6:
|
|
return 'Juni';
|
|
case 7:
|
|
return 'July';
|
|
case 8:
|
|
return 'August';
|
|
case 9:
|
|
return 'September';
|
|
case 10:
|
|
return 'Oktober';
|
|
case 11:
|
|
return 'November';
|
|
case 12:
|
|
return 'Dezember';
|
|
default:
|
|
return '?';
|
|
}
|
|
}
|
|
|
|
static String getDayName(int month) {
|
|
switch (month) {
|
|
case 1:
|
|
return 'Mo';
|
|
case 2:
|
|
return 'Di';
|
|
case 3:
|
|
return 'Mi';
|
|
case 4:
|
|
return 'Do';
|
|
case 5:
|
|
return 'Fr';
|
|
case 6:
|
|
return 'Sa';
|
|
case 7:
|
|
return 'So';
|
|
default:
|
|
return '?';
|
|
}
|
|
}
|
|
}
|
|
*/ |