diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index ad74def..5da2980 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -47,7 +47,7 @@ - @@ -131,14 +131,14 @@ - - @@ -152,7 +152,7 @@ - @@ -208,7 +208,7 @@ - @@ -229,7 +229,7 @@ - @@ -257,7 +257,7 @@ - @@ -299,7 +299,7 @@ - @@ -327,7 +327,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + @@ -411,7 +439,7 @@ - @@ -460,14 +488,14 @@ - - @@ -502,14 +530,14 @@ - - @@ -527,10 +555,31 @@ + + + + + + + + + + + + - + + + + + + @@ -586,7 +635,7 @@ - @@ -607,7 +656,7 @@ - @@ -649,7 +698,7 @@ - @@ -705,7 +754,7 @@ - @@ -719,7 +768,7 @@ - @@ -831,7 +880,7 @@ - @@ -971,63 +1020,63 @@ - - - - - - - - - @@ -1055,7 +1104,7 @@ - @@ -1076,7 +1125,7 @@ - @@ -1090,7 +1139,7 @@ - @@ -1125,7 +1174,7 @@ - @@ -1210,15 +1259,15 @@ - - + + - + @@ -1230,10 +1279,10 @@ - - + + - + @@ -1241,14 +1290,14 @@ - + - + - + @@ -1257,7 +1306,11 @@ - + + + + + @@ -1266,22 +1319,25 @@ - + - - + + - - + + - + + + + @@ -1289,10 +1345,10 @@ - + - + @@ -1305,9 +1361,9 @@ - + - + @@ -1323,7 +1379,7 @@ - + @@ -1342,29 +1398,29 @@ - - - - - - - - - + + + + + + + + + - + - + - + - + diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml index e0b5f46..87dd116 100644 --- a/.idea/libraries/Flutter_Plugins.xml +++ b/.idea/libraries/Flutter_Plugins.xml @@ -20,17 +20,23 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/lib/view/pages/more/countdown/animatedTime.dart b/lib/view/pages/more/countdown/animatedTime.dart index 045f0d6..6c4e45c 100644 --- a/lib/view/pages/more/countdown/animatedTime.dart +++ b/lib/view/pages/more/countdown/animatedTime.dart @@ -13,11 +13,13 @@ class AnimatedTime extends StatefulWidget { class _AnimatedTimeState extends State { 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 { textStyle: const TextStyle(fontSize: 15), ); } + + @override + void dispose() { + timer.cancel(); + super.dispose(); + } } diff --git a/lib/view/pages/holidays/holidays.dart b/lib/view/pages/more/holidays/holidays.dart similarity index 71% rename from lib/view/pages/holidays/holidays.dart rename to lib/view/pages/more/holidays/holidays.dart index 602e270..98af4c9 100644 --- a/lib/view/pages/holidays/holidays.dart +++ b/lib/view/pages/more/holidays/holidays.dart @@ -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 { ), 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 { List 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), diff --git a/lib/view/pages/more/overhang.dart b/lib/view/pages/more/overhang.dart index aa3c0a6..052fec2 100644 --- a/lib/view/pages/more/overhang.dart +++ b/lib/view/pages/more/overhang.dart @@ -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'; diff --git a/lib/widget/centeredLeading.dart b/lib/widget/centeredLeading.dart new file mode 100644 index 0000000..e83596b --- /dev/null +++ b/lib/widget/centeredLeading.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class CenteredLeading extends StatelessWidget { + final Widget child; + const CenteredLeading(this.child, {super.key}); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [child], + ); + } +} diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index f6f23bf..7299b5c 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,9 +6,13 @@ #include "generated_plugin_registrant.h" +#include #include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); + file_selector_plugin_register_with_registrar(file_selector_linux_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index f16b4c3..786ff5c 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + file_selector_linux url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 7026e66..9d5f78f 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,6 +6,7 @@ import FlutterMacOS import Foundation import device_info_plus +import file_selector_macos import package_info import path_provider_foundation import shared_preferences_foundation @@ -15,6 +16,7 @@ import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 9871f6b..779f0ee 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,10 +6,13 @@ #include "generated_plugin_registrant.h" +#include #include #include void RegisterPlugins(flutter::PluginRegistry* registry) { + FileSelectorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSelectorWindows")); SyncfusionPdfviewerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("SyncfusionPdfviewerWindowsPlugin")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 2487723..3757972 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + file_selector_windows syncfusion_pdfviewer_windows url_launcher_windows )