Change timetable view from Dayview to Weekview

Added current day and time hint
This commit is contained in:
2023-02-22 00:48:50 +01:00
parent 88e5a605fb
commit 7a3744a70a
5 changed files with 230 additions and 165 deletions

View File

@ -1,4 +1,6 @@
import 'dart:developer';
import 'package:intl/intl.dart';
import 'package:marianum_mobile/api/apiResponse.dart';
import 'package:marianum_mobile/api/webuntis/queries/getHolidays/getHolidaysCache.dart';
@ -12,8 +14,21 @@ import 'package:marianum_mobile/data/dataHolder.dart';
import '../../api/webuntis/queries/getTimetable/getTimetableCache.dart';
import '../../api/webuntis/queries/getTimetable/getTimetableResponse.dart';
extension DateTimeExtension on DateTime {
DateTime next(int day) {
return add(
Duration(
days: (day - weekday) % DateTime.daysPerWeek,
),
);
}
}
class TimetableProps extends DataHolder {
late DateTime queryDate;
var _queryWeek = DateTime.now();
late DateTime startDate = getDate(_queryWeek.subtract(Duration(days: _queryWeek.weekday - 1)));
late DateTime endDate = getDate(_queryWeek.add(Duration(days: DateTime.daysPerWeek - _queryWeek.weekday)));
GetTimetableResponse? _getTimetableResponse;
GetTimetableResponse get getTimetableResponse => _getTimetableResponse!;
@ -29,7 +44,8 @@ class TimetableProps extends DataHolder {
TimetableProps() {
nearest();
//nearest();
}
@override
@ -40,7 +56,8 @@ class TimetableProps extends DataHolder {
@override
void run() {
GetTimetableCache(
day: int.parse(DateFormat("yyyyMMdd").format(queryDate)),
startdate: int.parse(DateFormat("yyyyMMdd").format(startDate)),
enddate: int.parse(DateFormat("yyyyMMdd").format(endDate)),
onUpdate: (GetTimetableResponse data) => {
_getTimetableResponse = data,
notifyListeners(),
@ -70,25 +87,28 @@ class TimetableProps extends DataHolder {
}
void nearest() {
queryDate = DateTime.now();
while(isWeekend(queryDate)) {
next();
}
run();
_queryWeek = _queryWeek = DateTime.now();
updateWeek();
}
void next({previous = false}) {
do {
if(previous) {
queryDate = queryDate.subtract(const Duration(days: 1));
} else {
queryDate = queryDate.add(const Duration(days: 1));
}
} while(isWeekend(queryDate));
run();
void switchWeek({previous = false}) {
if(previous) {
_queryWeek = _queryWeek.subtract(const Duration(days: 7));
} else {
_queryWeek = _queryWeek.add(const Duration(days: 7));
}
updateWeek();
}
DateTime getDate(DateTime d) => DateTime(d.year, d.month, d.day);
bool isWeekend(DateTime queryDate) {
return queryDate.weekday == DateTime.saturday || queryDate.weekday == DateTime.sunday;
}
void updateWeek() {
startDate = getDate(_queryWeek.subtract(Duration(days: _queryWeek.weekday - 1)));
endDate = getDate(_queryWeek.add(Duration(days: DateTime.daysPerWeek - _queryWeek.weekday)));
run();
}
}