Change timetable view from Dayview to Weekview
Added current day and time hint
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user