Polished Holidays view

This commit is contained in:
2023-06-12 21:16:59 +02:00
parent 7a791ef21f
commit 12bde4ab43
11 changed files with 206 additions and 96 deletions

View File

@ -13,11 +13,13 @@ class AnimatedTime extends StatefulWidget {
class _AnimatedTimeState extends State<AnimatedTime> {
Duration current = Duration.zero;
late Timer timer;
@override
void initState() {
super.initState();
Timer.periodic(const Duration(seconds: 1), (Timer t) => update());
timer = Timer.periodic(const Duration(seconds: 1), (Timer t) => update());
current = widget.callback();
}
void update() {
@ -50,4 +52,10 @@ class _AnimatedTimeState extends State<AnimatedTime> {
textStyle: const TextStyle(fontSize: 15),
);
}
@override
void dispose() {
timer.cancel();
super.dispose();
}
}

View File

@ -1,12 +1,17 @@
import 'package:flutter/material.dart';
import 'package:flutter_native_splash/cli_commands.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/widget/centeredLeading.dart';
import 'package:marianum_mobile/widget/debug/debugTile.dart';
import 'package:marianum_mobile/widget/placeholderView.dart';
import 'package:provider/provider.dart';
import '../../../api/holidays/getHolidaysResponse.dart';
import '../../../model/holidays/holidaysProps.dart';
import '../../../storage/base/settingsProvider.dart';
import '../../../widget/confirmDialog.dart';
import '../../../widget/loadingSpinner.dart';
import '../../../../api/holidays/getHolidaysResponse.dart';
import '../../../../model/holidays/holidaysProps.dart';
import '../../../../storage/base/settingsProvider.dart';
import '../../../../widget/confirmDialog.dart';
import '../../../../widget/loadingSpinner.dart';
import '../countdown/animatedTime.dart';
class Holidays extends StatefulWidget {
const Holidays({super.key});
@ -56,7 +61,7 @@ class _HolidaysState extends State<Holidays> {
),
actions: [
TextButton(child: const Text("ferien-api.de öffnen"), onPressed: () => ConfirmDialog.openBrowser(context, "https://ferien-api.de/")),
TextButton(child: const Text("Schlißen"), onPressed: () => Navigator.of(context).pop()),
TextButton(child: const Text("Schließen"), onPressed: () => Navigator.of(context).pop()),
],
);
});
@ -103,30 +108,39 @@ class _HolidaysState extends State<Holidays> {
List<GetHolidaysResponseObject> holidays = value.getHolidaysResponse.data;
if(!showPastEvents) holidays = holidays.where((element) => DateTime.parse(element.end).isAfter(DateTime.now())).toList();
if(holidays.isEmpty) return const PlaceholderView(icon: Icons.search_off, text: "Es wurden keine Ferieneinträge gefunden!");
return ListView.builder(
itemCount: holidays.length,
itemBuilder: (context, index) {
GetHolidaysResponseObject holiday = holidays[index];
String holidayType = holiday.name.split(" ").first.capitalize();
return ListTile(
leading: const Icon(Icons.calendar_month),
title: Text("${parseString(holiday.start)} bis ${parseString(holiday.end)}"),
subtitle: Text("${holiday.name} - (${Jiffy.parse(holiday.start).fromNow()})"),
leading: const CenteredLeading(Icon(Icons.calendar_month)),
title: Text("$holidayType ab ${parseString(holiday.start)}"),
subtitle: Text("bis ${parseString(holiday.end)}"),
onTap: () => showDialog(context: context, builder: (context) => SimpleDialog(
title: Text("Ferien in Hessen | ${holiday.year}"),
title: Text("$holidayType ${holiday.year} in Hessen"),
children: [
ListTile(
leading: const Icon(Icons.signpost_outlined),
leading: const CenteredLeading(Icon(Icons.signpost_outlined)),
title: Text(holiday.name),
subtitle: Text(holiday.slug),
),
ListTile(
leading: const Icon(Icons.event),
title: Text("beginnend ${parseString(holiday.start)}"),
leading: const Icon(Icons.arrow_forward),
title: Text("vom ${parseString(holiday.start)}"),
),
ListTile(
leading: const Icon(Icons.event_busy_outlined),
title: Text("endend ${parseString(holiday.end)}"),
leading: const Icon(Icons.arrow_back),
title: Text("bis zum ${parseString(holiday.end)}"),
),
ListTile(
leading: const Icon(Icons.timer_outlined),
title: AnimatedTime(callback: () => DateTime.parse(holiday.start).difference(DateTime.now())),
subtitle: Text(Jiffy.parse(holiday.start).fromNow()),
),
DebugTile(holiday.toJson()).asTile(context),
],
)),
trailing: const Icon(Icons.arrow_right),

View File

@ -5,9 +5,9 @@ import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart';
import '../../../widget/ListItem.dart';
import '../../settings/settings.dart';
import '../holidays/holidays.dart';
import 'countdown/countdown.dart';
import 'gradeAverages/gradeAverage.dart';
import 'holidays/holidays.dart';
import 'message/message.dart';
import 'roomplan/roomplan.dart';