Polished Holidays view
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
@ -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';
|
||||
|
||||
|
Reference in New Issue
Block a user