From b70153fd9441430a96e5ad7b08513f56d9b46e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Sat, 20 Jul 2024 22:02:34 +0200 Subject: [PATCH 01/27] Remove News and Movies from Home --- lib/base/enums/widget_type.dart | 6 +++--- .../widgetComponent/viewModels/home_viewmodel.dart | 12 ------------ .../widgetComponent/views/widget_screen.dart | 2 +- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/lib/base/enums/widget_type.dart b/lib/base/enums/widget_type.dart index 39a759d8..fc1b0dd1 100644 --- a/lib/base/enums/widget_type.dart +++ b/lib/base/enums/widget_type.dart @@ -2,7 +2,7 @@ enum WidgetType { cafeterias, calendar, departures, - studyRooms, - movies, - news; + studyRooms; + //movies, + //news; } diff --git a/lib/homeComponent/widgetComponent/viewModels/home_viewmodel.dart b/lib/homeComponent/widgetComponent/viewModels/home_viewmodel.dart index 2bdd80fb..ea227a47 100644 --- a/lib/homeComponent/widgetComponent/viewModels/home_viewmodel.dart +++ b/lib/homeComponent/widgetComponent/viewModels/home_viewmodel.dart @@ -4,8 +4,6 @@ import 'package:campus_flutter/base/enums/widget_type.dart'; import 'package:campus_flutter/calendarComponent/views/homeWidget/calendar_widget_view.dart'; import 'package:campus_flutter/departuresComponent/views/homeWidget/departures_widget_view.dart'; import 'package:campus_flutter/main.dart'; -import 'package:campus_flutter/movieComponent/views/homeWidget/movies_widget_view.dart'; -import 'package:campus_flutter/newsComponent/views/homeWidget/news_widget_view.dart'; import 'package:campus_flutter/placesComponent/views/homeWidget/cafeteria_widget_view.dart'; import 'package:campus_flutter/placesComponent/views/homeWidget/study_room_widget_view.dart'; import 'package:campus_flutter/settingsComponent/service/user_preferences_service.dart'; @@ -79,10 +77,6 @@ class HomeViewModel { return const DeparturesHomeWidget(); case WidgetType.studyRooms: return const StudyRoomWidgetView.closest(); - case WidgetType.movies: - return const MoviesHomeWidget(); - case WidgetType.news: - return const NewsWidgetView(); } } @@ -96,10 +90,6 @@ class HomeViewModel { return context.tr("departures"); case WidgetType.studyRooms: return context.tr("nearestStudyRooms"); - case WidgetType.movies: - return context.tr("movies"); - case WidgetType.news: - return context.tr("news"); } } @@ -108,8 +98,6 @@ class HomeViewModel { HomeScreenWidget(widgetType: WidgetType.calendar), HomeScreenWidget(widgetType: WidgetType.departures), HomeScreenWidget(widgetType: WidgetType.studyRooms), - HomeScreenWidget(widgetType: WidgetType.movies), - HomeScreenWidget(widgetType: WidgetType.news), ]; void reset() { diff --git a/lib/homeComponent/widgetComponent/views/widget_screen.dart b/lib/homeComponent/widgetComponent/views/widget_screen.dart index 7f13aee5..858d8f57 100644 --- a/lib/homeComponent/widgetComponent/views/widget_screen.dart +++ b/lib/homeComponent/widgetComponent/views/widget_screen.dart @@ -14,7 +14,7 @@ class WidgetScreen extends ConsumerWidget { showModalBottomSheet( context: context, builder: (context) => SizedBox( - height: MediaQuery.sizeOf(context).height * 0.6, + height: MediaQuery.sizeOf(context).height * 0.45, child: const HomeSettingsView(), ), showDragHandle: true, From 54efe5cfba87d1472f5abf3771f138aaada2bb10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 25 Jul 2024 16:33:26 +0200 Subject: [PATCH 02/27] Bump Dependencies --- android/app/build.gradle | 2 +- android/settings.gradle | 6 +- ios/Podfile.lock | 72 +++++++++++----------- pubspec.lock | 130 +++++++++++++++++++-------------------- pubspec.yaml | 2 +- 5 files changed, 106 insertions(+), 106 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index fc61cb27..10b6f63e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -90,7 +90,7 @@ flutter { dependencies { implementation 'com.android.support:multidex' - implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2' + implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3' } apply plugin: 'com.google.firebase.crashlytics' diff --git a/android/settings.gradle b/android/settings.gradle index 0f0a598e..8d85322b 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -18,11 +18,11 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version '8.5.0' apply false + id "com.android.application" version '8.5.1' apply false id "org.jetbrains.kotlin.android" version "1.9.20" apply false - id "org.jetbrains.kotlin.plugin.serialization" version "1.9.22" apply false + id "org.jetbrains.kotlin.plugin.serialization" version "2.0.0" apply false id "com.google.gms.google-services" version "4.4.2" apply false - id "com.google.firebase.crashlytics" version "3.0.1" apply false + id "com.google.firebase.crashlytics" version "3.0.2" apply false } include ":app" diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 36241713..1f59c81b 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,36 +1,36 @@ PODS: - device_info_plus (0.0.1): - Flutter - - Firebase/CoreOnly (10.27.0): - - FirebaseCore (= 10.27.0) - - Firebase/Crashlytics (10.27.0): + - Firebase/CoreOnly (10.28.0): + - FirebaseCore (= 10.28.0) + - Firebase/Crashlytics (10.28.0): - Firebase/CoreOnly - - FirebaseCrashlytics (~> 10.27.0) - - Firebase/RemoteConfig (10.27.0): + - FirebaseCrashlytics (~> 10.28.0) + - Firebase/RemoteConfig (10.28.0): - Firebase/CoreOnly - - FirebaseRemoteConfig (~> 10.27.0) - - firebase_core (3.1.1): - - Firebase/CoreOnly (= 10.27.0) + - FirebaseRemoteConfig (~> 10.28.0) + - firebase_core (3.2.0): + - Firebase/CoreOnly (= 10.28.0) - Flutter - - firebase_crashlytics (4.0.2): - - Firebase/Crashlytics (= 10.27.0) + - firebase_crashlytics (4.0.3): + - Firebase/Crashlytics (= 10.28.0) - firebase_core - Flutter - - firebase_remote_config (5.0.2): - - Firebase/RemoteConfig (= 10.27.0) + - firebase_remote_config (5.0.3): + - Firebase/RemoteConfig (= 10.28.0) - firebase_core - Flutter - - FirebaseABTesting (10.28.0): + - FirebaseABTesting (10.29.0): - FirebaseCore (~> 10.0) - - FirebaseCore (10.27.0): + - FirebaseCore (10.28.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.12) - GoogleUtilities/Logger (~> 7.12) - - FirebaseCoreExtension (10.28.0): + - FirebaseCoreExtension (10.29.0): - FirebaseCore (~> 10.0) - - FirebaseCoreInternal (10.28.0): + - FirebaseCoreInternal (10.29.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseCrashlytics (10.27.0): + - FirebaseCrashlytics (10.28.1): - FirebaseCore (~> 10.5) - FirebaseInstallations (~> 10.0) - FirebaseRemoteConfigInterop (~> 10.23) @@ -39,12 +39,12 @@ PODS: - GoogleUtilities/Environment (~> 7.8) - nanopb (< 2.30911.0, >= 2.30908.0) - PromisesObjC (~> 2.1) - - FirebaseInstallations (10.28.0): + - FirebaseInstallations (10.29.0): - FirebaseCore (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/UserDefaults (~> 7.8) - PromisesObjC (~> 2.1) - - FirebaseRemoteConfig (10.27.0): + - FirebaseRemoteConfig (10.28.0): - FirebaseABTesting (~> 10.0) - FirebaseCore (~> 10.0) - FirebaseInstallations (~> 10.0) @@ -52,8 +52,8 @@ PODS: - FirebaseSharedSwift (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseRemoteConfigInterop (10.28.0) - - FirebaseSessions (10.28.0): + - FirebaseRemoteConfigInterop (10.29.0) + - FirebaseSessions (10.29.0): - FirebaseCore (~> 10.5) - FirebaseCoreExtension (~> 10.0) - FirebaseInstallations (~> 10.0) @@ -62,7 +62,7 @@ PODS: - GoogleUtilities/UserDefaults (~> 7.13) - nanopb (< 2.30911.0, >= 2.30908.0) - PromisesSwift (~> 2.1) - - FirebaseSharedSwift (10.28.0) + - FirebaseSharedSwift (10.29.0) - Flutter (1.0.0) - flutter_native_splash (0.0.1): - Flutter @@ -232,20 +232,20 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d - Firebase: 26b040b20866a55f55eb3611b9fcf3ae64816b86 - firebase_core: f8d0424c45e0f1e596811085fc12c638d628457c - firebase_crashlytics: 39ca2155bac4fa2eec0aec9f0eb5e938a08bca23 - firebase_remote_config: 962876d64b52d7710d756ea85e27c768002dc628 - FirebaseABTesting: 589bc28c0ab3e5554336895a34aa262e24276665 - FirebaseCore: a2b95ae4ce7c83ceecfbbbe3b6f1cddc7415a808 - FirebaseCoreExtension: f63147b723e2a700fe0f34ec6fb7f358d6fe83e0 - FirebaseCoreInternal: 58d07f1362fddeb0feb6a857d1d1d1c5e558e698 - FirebaseCrashlytics: 81ea6ec96519388687f6061beb838a8eec482293 - FirebaseInstallations: 60c1d3bc1beef809fd1ad1189a8057a040c59f2e - FirebaseRemoteConfig: 37a2ba3c8c454be8553a41ba1a2f4a4f0b845670 - FirebaseRemoteConfigInterop: 70d200c6956ef3b5c3592a95e824c1210682d785 - FirebaseSessions: 20da8500ad66bb12622743e170459bf62a0768e8 - FirebaseSharedSwift: 48de4aec81a6b79bb30404e5e6db43ea74848fed + Firebase: 5121c624121af81cbc81df3bda414b3c28c4f3c3 + firebase_core: a9d0180d5285527884d07a41eb4a9ec9ed12cdb6 + firebase_crashlytics: 12b2b1ecfc50f6c551c68e491ae156b2b7d41273 + firebase_remote_config: 5f92bfc62c3ef2c657bf3d703ffa4be29082280f + FirebaseABTesting: d87f56707159bae64e269757a6e963d490f2eebe + FirebaseCore: 857dc1c6dd1255675047404d8466f7dfaac5d779 + FirebaseCoreExtension: 705ca5b14bf71d2564a0ddc677df1fc86ffa600f + FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934 + FirebaseCrashlytics: f51e12b93f8e1134bbed602ed22df33804d55ccf + FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd + FirebaseRemoteConfig: f0879a8dccf4e8905716ed849569130efaeab3e2 + FirebaseRemoteConfigInterop: 6efda51fb5e2f15b16585197e26eaa09574e8a4d + FirebaseSessions: dbd14adac65ce996228652c1fc3a3f576bdf3ecc + FirebaseSharedSwift: 20530f495084b8d840f78a100d8c5ee613375f6e Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 diff --git a/pubspec.lock b/pubspec.lock index dcf5f47f..e058957f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: a315d1c444402c3fa468de626d33a1c666041c87e9e195e8fb355b7084aefcc1 + sha256: b46f62516902afb04befa4b30eb6a12ac1f58ca8cb25fb9d632407259555dd3d url: "https://pub.dev" source: hosted - version: "1.3.38" + version: "1.3.39" analyzer: dependency: transitive description: @@ -317,18 +317,18 @@ packages: dependency: "direct main" description: name: drift - sha256: "6acedc562ffeed308049f78fb1906abad3d65714580b6745441ee6d50ec564cd" + sha256: "4e0ffee40d23f0b809e6cff1ad202886f51d629649073ed42d9cd1d194ea943e" url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.19.1+1" drift_dev: dependency: "direct dev" description: name: drift_dev - sha256: d9b020736ea85fff1568699ce18b89fabb3f0f042e8a7a05e84a3ec20d39acde + sha256: ac7647c6cedca99724ca300cff9181f6dd799428f8ed71f94159ed0528eaec26 url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.19.1" easy_localization: dependency: "direct main" description: @@ -373,10 +373,10 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "1e06b0538ab3108a61d895ee16951670b491c4a94fce8f2d30e5de7a5eca4b28" + sha256: "5159984ce9b70727473eb388394650677c02c925aaa6c9439905e1f30966a4d5" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.2.0" firebase_core_platform_interface: dependency: transitive description: @@ -389,50 +389,50 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: "6643fe3dbd021e6ccfb751f7882b39df355708afbdeb4130fc50f9305a9d1a3d" + sha256: "23509cb3cddfb3c910c143279ac3f07f06d3120f7d835e4a5d4b42558e978712" url: "https://pub.dev" source: hosted - version: "2.17.2" + version: "2.17.3" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: "54c06fa45585ed77e978b049f8e488db7677313d5dc808c54d24384a6e5bf0c8" + sha256: da32da3b441d1bee73ca990085a3ae174b9fb3585229f02a278a2ea42454d784 url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.0.3" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "8ec63ebefe9233d3cdc744f75d5b88cf16b6241d8680e6284c2d272bcb0a10af" + sha256: b7567106ed57bbadaa0610774cc17a10b82ed04a1aba99790f303385ac4ba78f url: "https://pub.dev" source: hosted - version: "3.6.38" + version: "3.6.39" firebase_remote_config: dependency: "direct main" description: name: firebase_remote_config - sha256: a554ac6d87e3f45d52fda2df664787311d2ece301c6de9d438acce3c3f8bdc9c + sha256: aa150fcbaa1fe5afcb912ccf6a059f1a8ef8566dceccaa45ff72c8498ca2103e url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "5.0.3" firebase_remote_config_platform_interface: dependency: transitive description: name: firebase_remote_config_platform_interface - sha256: c419b12dd5c15b72ceb501e1472cfdeb9924372adc2b3bcf20e37bc5a4aa0984 + sha256: "0c4f4b473074ab37b069360629998dbc7175c334afc249051d8ad590521741a8" url: "https://pub.dev" source: hosted - version: "1.4.38" + version: "1.4.39" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web - sha256: ac525f7d67d1e41aef15c47f5f8285681841ce6fadc23ca6a5a0586e7a7ce52d + sha256: "45fcb61f5bd46eada6dc11d7167512e3441db50cfadd05394272fc1fdce4a999" url: "https://pub.dev" source: hosted - version: "1.6.10" + version: "1.6.11" fixnum: dependency: transitive description: @@ -450,10 +450,10 @@ packages: dependency: transitive description: name: flutter_cache_manager - sha256: "395d6b7831f21f3b989ebedbb785545932adb9afe2622c1ffacf7f4b53a7e544" + sha256: ceff65d74d907b1b772e22cf04daad60fb472461638977d9fae8b00a63e01e3d url: "https://pub.dev" source: hosted - version: "3.3.2" + version: "3.3.3" flutter_colorpicker: dependency: "direct main" description: @@ -489,10 +489,10 @@ packages: dependency: "direct main" description: name: flutter_native_splash - sha256: edf39bcf4d74aca1eb2c1e43c3e445fd9f494013df7f0da752fefe72020eedc0 + sha256: aa06fec78de2190f3db4319dd60fdc8d12b2626e93ef9828633928c2dcaea840 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -659,18 +659,18 @@ packages: dependency: "direct main" description: name: go_router - sha256: cdae1b9c8bd7efadcef6112e81c903662ef2ce105cbd220a04bbb7c3425b5554 + sha256: "39dd52168d6c59984454183148dc3a5776960c61083adfc708cc79a7b3ce1ba8" url: "https://pub.dev" source: hosted - version: "14.2.0" + version: "14.2.1" google_identity_services_web: dependency: transitive description: name: google_identity_services_web - sha256: "9482364c9f8b7bd36902572ebc3a7c2b5c8ee57a9c93e6eb5099c1a9ec5265d8" + sha256: c6a67eb2117d3954a95afe307c3347d5b7ead5f5ef78bd94b1a62d161f6335a8 url: "https://pub.dev" source: hosted - version: "0.3.1+1" + version: "0.3.1+3" google_maps: dependency: transitive description: @@ -691,18 +691,18 @@ packages: dependency: transitive description: name: google_maps_flutter_android - sha256: "6b7f7730960f9adb1b77a530572182451d66e30808ebb052665e64c4276a8f0e" + sha256: f6306d83edddba7aa017ca6f547d6f36a1443f90ed49d91d48ef70d7aa86e2e1 url: "https://pub.dev" source: hosted - version: "2.11.1" + version: "2.12.0" google_maps_flutter_ios: dependency: transitive description: name: google_maps_flutter_ios - sha256: "1043d0a4ad52612444b24edbd2d61f6de40e01e842fe2a9248be53fa70bc7047" + sha256: a6e3c6ecdda6c985053f944be13a0645ebb919da2ef0f5bc579c5e1670a5b2a8 url: "https://pub.dev" source: hosted - version: "2.8.1" + version: "2.10.0" google_maps_flutter_platform_interface: dependency: transitive description: @@ -731,16 +731,16 @@ packages: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" grpc: dependency: "direct main" description: path: "." ref: master - resolved-ref: "76d39e92c579daa72dc27c4f8a36a7db8c69e9c1" + resolved-ref: "0757d3ba6a41fbdc3682757fe4f915c5b9badfe0" url: "https://github.com/jakobkoerber/grpc-dart.git" source: git version: "4.0.0" @@ -764,10 +764,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http2: dependency: transitive description: @@ -1012,10 +1012,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: bca87b0165ffd7cdb9cad8edd22d18d2201e886d9a9f19b4fb3452ea7df3a72a + sha256: "30c5aa827a6ae95ce2853cdc5fe3971daaac00f6f081c419c013f7f57bff2f5e" url: "https://pub.dev" source: hosted - version: "2.2.6" + version: "2.2.7" path_provider_foundation: dependency: transitive description: @@ -1044,10 +1044,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" permission_handler: dependency: "direct main" description: @@ -1156,10 +1156,10 @@ packages: dependency: transitive description: name: qr - sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3" + sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" quick_actions: dependency: "direct main" description: @@ -1212,10 +1212,10 @@ packages: dependency: "direct main" description: name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" url: "https://pub.dev" source: hosted - version: "0.27.7" + version: "0.28.0" sanitize_html: dependency: transitive description: @@ -1260,10 +1260,10 @@ packages: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "034650b71e73629ca08a0bd789fd1d83cc63c2d1e405946f7cef7bc37432f93a" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shared_preferences_web: dependency: transitive description: @@ -1409,10 +1409,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: ade9a67fd70d0369329ed3373208de7ebd8662470e8c396fc8d0d60f9acdfc9f + sha256: "3be52b4968fc2f098ba735863404756d2fe3ea0729cf006a5b5612618f74ca04" url: "https://pub.dev" source: hosted - version: "0.36.0" + version: "0.37.1" stack_trace: dependency: transitive description: @@ -1457,34 +1457,34 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: ad7a98aee73ab3d01819320e43458af4870f5a4acad4b54df9e4f0938feac064 + sha256: fd54004b6ce28564bdc9f5ae08de332027d63dfc15ea12d195613b1cd1b0b2da url: "https://pub.dev" source: hosted - version: "26.1.40+1" + version: "26.2.4" syncfusion_flutter_charts: dependency: "direct main" description: name: syncfusion_flutter_charts - sha256: ff73ea5caa2b6a751dd96b61cba69c8f32ab3eec4fa0323ee9fd02c77df1dfec + sha256: dc4ad537a0e6d1d751c934509c270aa9bf09958bd6357b4dc744d809d6a8b5d7 url: "https://pub.dev" source: hosted - version: "26.1.40" + version: "26.2.4" syncfusion_flutter_core: dependency: "direct main" description: name: syncfusion_flutter_core - sha256: "87cbeee9b916e013eedbd43bf07f253c34dd5184c88325e5227434e0f8b89a68" + sha256: "34920fc391f9562d68657b9b25be6e873a67e069a52bcf41ae583b7eb46dcb26" url: "https://pub.dev" source: hosted - version: "26.1.40" + version: "26.2.4" syncfusion_flutter_datepicker: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: ebc10c86618a8c410f4707dc6ff354daccb13d5f8a65f5fffa69a07806e4e0dd + sha256: "0f88926af198ca77954ce291e2e104b7df9cebbe68cfd452830741b3fca950d2" url: "https://pub.dev" source: hosted - version: "26.1.40" + version: "26.2.4" synchronized: dependency: transitive description: @@ -1577,18 +1577,18 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf + sha256: "95d8027db36a0e52caf55680f91e33ea6aa12a3ce608c90b06f4e429a21067ac" url: "https://pub.dev" source: hosted - version: "6.3.3" + version: "6.3.5" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89" + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.3.1" url_launcher_linux: dependency: transitive description: @@ -1625,18 +1625,18 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" uuid: dependency: "direct main" description: name: uuid - sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" + sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90" url: "https://pub.dev" source: hosted - version: "4.4.0" + version: "4.4.2" vector_graphics: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8117df3e..8e9c9ef1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,7 +24,7 @@ dependencies: xml2json: ^6.1.0 # state management - rxdart: ^0.27.7 + rxdart: ^0.28.0 go_router: ^14.0.1 flutter_riverpod: ^2.3.6 get_it: ^7.6.0 From 309176b12424d24646ac8bc69fbf6ccebd6eb14b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 25 Jul 2024 16:34:11 +0200 Subject: [PATCH 03/27] Fix Build Error --- lib/base/networking/cache/cache_entry.g.dart | 40 +++++++++----------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/lib/base/networking/cache/cache_entry.g.dart b/lib/base/networking/cache/cache_entry.g.dart index a2b2e6ca..43ae0da7 100644 --- a/lib/base/networking/cache/cache_entry.g.dart +++ b/lib/base/networking/cache/cache_entry.g.dart @@ -175,6 +175,17 @@ class CacheEntryData extends DataClass implements Insertable { saved: saved ?? this.saved, body: body ?? this.body, ); + CacheEntryData copyWithCompanion(CacheEntryCompanion data) { + return CacheEntryData( + id: data.id.present ? data.id.value : this.id, + url: data.url.present ? data.url.value : this.url, + validUntil: + data.validUntil.present ? data.validUntil.value : this.validUntil, + saved: data.saved.present ? data.saved.value : this.saved, + body: data.body.present ? data.body.value : this.body, + ); + } + @override String toString() { return (StringBuffer('CacheEntryData(') @@ -302,7 +313,7 @@ class CacheEntryCompanion extends UpdateCompanion { abstract class _$CacheDatabase extends GeneratedDatabase { _$CacheDatabase(QueryExecutor e) : super(e); - _$CacheDatabaseManager get managers => _$CacheDatabaseManager(this); + $CacheDatabaseManager get managers => $CacheDatabaseManager(this); late final $CacheEntryTable cacheEntry = $CacheEntryTable(this); @override Iterable> get allTables => @@ -311,7 +322,7 @@ abstract class _$CacheDatabase extends GeneratedDatabase { List get allSchemaEntities => [cacheEntry]; } -typedef $$CacheEntryTableInsertCompanionBuilder = CacheEntryCompanion Function({ +typedef $$CacheEntryTableCreateCompanionBuilder = CacheEntryCompanion Function({ required int id, required String url, required DateTime validUntil, @@ -334,8 +345,7 @@ class $$CacheEntryTableTableManager extends RootTableManager< CacheEntryData, $$CacheEntryTableFilterComposer, $$CacheEntryTableOrderingComposer, - $$CacheEntryTableProcessedTableManager, - $$CacheEntryTableInsertCompanionBuilder, + $$CacheEntryTableCreateCompanionBuilder, $$CacheEntryTableUpdateCompanionBuilder> { $$CacheEntryTableTableManager(_$CacheDatabase db, $CacheEntryTable table) : super(TableManagerState( @@ -345,9 +355,7 @@ class $$CacheEntryTableTableManager extends RootTableManager< $$CacheEntryTableFilterComposer(ComposerState(db, table)), orderingComposer: $$CacheEntryTableOrderingComposer(ComposerState(db, table)), - getChildManagerBuilder: (p) => - $$CacheEntryTableProcessedTableManager(p), - getUpdateCompanionBuilder: ({ + updateCompanionCallback: ({ Value id = const Value.absent(), Value url = const Value.absent(), Value validUntil = const Value.absent(), @@ -363,7 +371,7 @@ class $$CacheEntryTableTableManager extends RootTableManager< body: body, rowid: rowid, ), - getInsertCompanionBuilder: ({ + createCompanionCallback: ({ required int id, required String url, required DateTime validUntil, @@ -382,18 +390,6 @@ class $$CacheEntryTableTableManager extends RootTableManager< )); } -class $$CacheEntryTableProcessedTableManager extends ProcessedTableManager< - _$CacheDatabase, - $CacheEntryTable, - CacheEntryData, - $$CacheEntryTableFilterComposer, - $$CacheEntryTableOrderingComposer, - $$CacheEntryTableProcessedTableManager, - $$CacheEntryTableInsertCompanionBuilder, - $$CacheEntryTableUpdateCompanionBuilder> { - $$CacheEntryTableProcessedTableManager(super.$state); -} - class $$CacheEntryTableFilterComposer extends FilterComposer<_$CacheDatabase, $CacheEntryTable> { $$CacheEntryTableFilterComposer(super.$state); @@ -452,9 +448,9 @@ class $$CacheEntryTableOrderingComposer ColumnOrderings(column, joinBuilders: joinBuilders)); } -class _$CacheDatabaseManager { +class $CacheDatabaseManager { final _$CacheDatabase _db; - _$CacheDatabaseManager(this._db); + $CacheDatabaseManager(this._db); $$CacheEntryTableTableManager get cacheEntry => $$CacheEntryTableTableManager(_db, _db.cacheEntry); } From c28c0dd695f199274d8b6919b821550e38e24ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 25 Jul 2024 16:34:20 +0200 Subject: [PATCH 04/27] Update Proto Files --- .../apis/tumdev/campus_backend.pb.dart | 244 ++++++++++++++++++ .../apis/tumdev/campus_backend.pbgrpc.dart | 20 ++ .../apis/tumdev/campus_backend.pbjson.dart | 61 +++++ protos/tumdev/campus_backend.proto | 24 ++ 4 files changed, 349 insertions(+) diff --git a/lib/base/networking/apis/tumdev/campus_backend.pb.dart b/lib/base/networking/apis/tumdev/campus_backend.pb.dart index 3c486186..91256630 100644 --- a/lib/base/networking/apis/tumdev/campus_backend.pb.dart +++ b/lib/base/networking/apis/tumdev/campus_backend.pb.dart @@ -4349,6 +4349,250 @@ class GetCanteenHeadCountReply extends $pb.GeneratedMessage { $1.Timestamp ensureTimestamp() => $_ensure(3); } +class ListStudentClubRequest extends $pb.GeneratedMessage { + factory ListStudentClubRequest() => create(); + ListStudentClubRequest._() : super(); + factory ListStudentClubRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory ListStudentClubRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ListStudentClubRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'api'), createEmptyInstance: create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ListStudentClubRequest clone() => ListStudentClubRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ListStudentClubRequest copyWith(void Function(ListStudentClubRequest) updates) => super.copyWith((message) => updates(message as ListStudentClubRequest)) as ListStudentClubRequest; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static ListStudentClubRequest create() => ListStudentClubRequest._(); + ListStudentClubRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static ListStudentClubRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ListStudentClubRequest? _defaultInstance; +} + +class ListStudentClubReply extends $pb.GeneratedMessage { + factory ListStudentClubReply({ + $core.Iterable? collections, + }) { + final $result = create(); + if (collections != null) { + $result.collections.addAll(collections); + } + return $result; + } + ListStudentClubReply._() : super(); + factory ListStudentClubReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory ListStudentClubReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ListStudentClubReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'api'), createEmptyInstance: create) + ..pc(1, _omitFieldNames ? '' : 'collections', $pb.PbFieldType.PM, subBuilder: StudentClubCollection.create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ListStudentClubReply clone() => ListStudentClubReply()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ListStudentClubReply copyWith(void Function(ListStudentClubReply) updates) => super.copyWith((message) => updates(message as ListStudentClubReply)) as ListStudentClubReply; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static ListStudentClubReply create() => ListStudentClubReply._(); + ListStudentClubReply createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static ListStudentClubReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ListStudentClubReply? _defaultInstance; + + @$pb.TagNumber(1) + $core.List get collections => $_getList(0); +} + +class StudentClub extends $pb.GeneratedMessage { + factory StudentClub({ + $core.String? name, + $core.String? description, + $core.String? linkUrl, + $core.String? coverUrl, + }) { + final $result = create(); + if (name != null) { + $result.name = name; + } + if (description != null) { + $result.description = description; + } + if (linkUrl != null) { + $result.linkUrl = linkUrl; + } + if (coverUrl != null) { + $result.coverUrl = coverUrl; + } + return $result; + } + StudentClub._() : super(); + factory StudentClub.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory StudentClub.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'StudentClub', package: const $pb.PackageName(_omitMessageNames ? '' : 'api'), createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'name') + ..aOS(2, _omitFieldNames ? '' : 'description') + ..aOS(3, _omitFieldNames ? '' : 'linkUrl') + ..aOS(4, _omitFieldNames ? '' : 'coverUrl') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + StudentClub clone() => StudentClub()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + StudentClub copyWith(void Function(StudentClub) updates) => super.copyWith((message) => updates(message as StudentClub)) as StudentClub; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static StudentClub create() => StudentClub._(); + StudentClub createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static StudentClub getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static StudentClub? _defaultInstance; + + /// The name of the club + @$pb.TagNumber(1) + $core.String get name => $_getSZ(0); + @$pb.TagNumber(1) + set name($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasName() => $_has(0); + @$pb.TagNumber(1) + void clearName() => clearField(1); + + /// How the club describes itsself + @$pb.TagNumber(2) + $core.String get description => $_getSZ(1); + @$pb.TagNumber(2) + set description($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasDescription() => $_has(1); + @$pb.TagNumber(2) + void clearDescription() => clearField(2); + + /// Where the clubs main internet presence is + @$pb.TagNumber(3) + $core.String get linkUrl => $_getSZ(2); + @$pb.TagNumber(3) + set linkUrl($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasLinkUrl() => $_has(2); + @$pb.TagNumber(3) + void clearLinkUrl() => clearField(3); + + /// Where to find a image for this club + @$pb.TagNumber(4) + $core.String get coverUrl => $_getSZ(3); + @$pb.TagNumber(4) + set coverUrl($core.String v) { $_setString(3, v); } + @$pb.TagNumber(4) + $core.bool hasCoverUrl() => $_has(3); + @$pb.TagNumber(4) + void clearCoverUrl() => clearField(4); +} + +class StudentClubCollection extends $pb.GeneratedMessage { + factory StudentClubCollection({ + $core.String? title, + $core.String? description, + $core.Iterable? clubs, + }) { + final $result = create(); + if (title != null) { + $result.title = title; + } + if (description != null) { + $result.description = description; + } + if (clubs != null) { + $result.clubs.addAll(clubs); + } + return $result; + } + StudentClubCollection._() : super(); + factory StudentClubCollection.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory StudentClubCollection.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'StudentClubCollection', package: const $pb.PackageName(_omitMessageNames ? '' : 'api'), createEmptyInstance: create) + ..aOS(1, _omitFieldNames ? '' : 'title') + ..aOS(2, _omitFieldNames ? '' : 'description') + ..pc(3, _omitFieldNames ? '' : 'clubs', $pb.PbFieldType.PM, subBuilder: StudentClub.create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + StudentClubCollection clone() => StudentClubCollection()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + StudentClubCollection copyWith(void Function(StudentClubCollection) updates) => super.copyWith((message) => updates(message as StudentClubCollection)) as StudentClubCollection; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static StudentClubCollection create() => StudentClubCollection._(); + StudentClubCollection createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static StudentClubCollection getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static StudentClubCollection? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get title => $_getSZ(0); + @$pb.TagNumber(1) + set title($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasTitle() => $_has(0); + @$pb.TagNumber(1) + void clearTitle() => clearField(1); + + @$pb.TagNumber(2) + $core.String get description => $_getSZ(1); + @$pb.TagNumber(2) + set description($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasDescription() => $_has(1); + @$pb.TagNumber(2) + void clearDescription() => clearField(2); + + @$pb.TagNumber(3) + $core.List get clubs => $_getList(2); +} + const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names'); const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/lib/base/networking/apis/tumdev/campus_backend.pbgrpc.dart b/lib/base/networking/apis/tumdev/campus_backend.pbgrpc.dart index bff076be..a806781e 100644 --- a/lib/base/networking/apis/tumdev/campus_backend.pbgrpc.dart +++ b/lib/base/networking/apis/tumdev/campus_backend.pbgrpc.dart @@ -109,6 +109,10 @@ class CampusClient extends $grpc.Client { '/api.Campus/DeleteDevice', ($0.DeleteDeviceRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $0.DeleteDeviceReply.fromBuffer(value)); + static final _$listStudentClub = $grpc.ClientMethod<$0.ListStudentClubRequest, $0.ListStudentClubReply>( + '/api.Campus/ListStudentClub', + ($0.ListStudentClubRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $0.ListStudentClubReply.fromBuffer(value)); CampusClient($grpc.ClientChannel channel, {$grpc.CallOptions? options, @@ -203,6 +207,10 @@ class CampusClient extends $grpc.Client { $grpc.ResponseFuture<$0.DeleteDeviceReply> deleteDevice($0.DeleteDeviceRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$deleteDevice, request, options: options); } + + $grpc.ResponseFuture<$0.ListStudentClubReply> listStudentClub($0.ListStudentClubRequest request, {$grpc.CallOptions? options}) { + return $createUnaryCall(_$listStudentClub, request, options: options); + } } @$pb.GrpcServiceName('api.Campus') @@ -364,6 +372,13 @@ abstract class CampusServiceBase extends $grpc.Service { false, ($core.List<$core.int> value) => $0.DeleteDeviceRequest.fromBuffer(value), ($0.DeleteDeviceReply value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$0.ListStudentClubRequest, $0.ListStudentClubReply>( + 'ListStudentClub', + listStudentClub_Pre, + false, + false, + ($core.List<$core.int> value) => $0.ListStudentClubRequest.fromBuffer(value), + ($0.ListStudentClubReply value) => value.writeToBuffer())); } $async.Future<$0.ListNewsAlertsReply> listNewsAlerts_Pre($grpc.ServiceCall call, $async.Future<$0.ListNewsAlertsRequest> request) async { @@ -450,6 +465,10 @@ abstract class CampusServiceBase extends $grpc.Service { return deleteDevice(call, await request); } + $async.Future<$0.ListStudentClubReply> listStudentClub_Pre($grpc.ServiceCall call, $async.Future<$0.ListStudentClubRequest> request) async { + return listStudentClub(call, await request); + } + $async.Future<$0.ListNewsAlertsReply> listNewsAlerts($grpc.ServiceCall call, $0.ListNewsAlertsRequest request); $async.Future<$0.ListNewsSourcesReply> listNewsSources($grpc.ServiceCall call, $0.ListNewsSourcesRequest request); $async.Future<$0.ListNewsReply> listNews($grpc.ServiceCall call, $0.ListNewsRequest request); @@ -472,4 +491,5 @@ abstract class CampusServiceBase extends $grpc.Service { $async.Future<$0.GetCanteenHeadCountReply> getCanteenHeadCount($grpc.ServiceCall call, $0.GetCanteenHeadCountRequest request); $async.Future<$0.CreateDeviceReply> createDevice($grpc.ServiceCall call, $0.CreateDeviceRequest request); $async.Future<$0.DeleteDeviceReply> deleteDevice($grpc.ServiceCall call, $0.DeleteDeviceRequest request); + $async.Future<$0.ListStudentClubReply> listStudentClub($grpc.ServiceCall call, $0.ListStudentClubRequest request); } diff --git a/lib/base/networking/apis/tumdev/campus_backend.pbjson.dart b/lib/base/networking/apis/tumdev/campus_backend.pbjson.dart index 12c04947..efc744fc 100644 --- a/lib/base/networking/apis/tumdev/campus_backend.pbjson.dart +++ b/lib/base/networking/apis/tumdev/campus_backend.pbjson.dart @@ -910,3 +910,64 @@ final $typed_data.Uint8List getCanteenHeadCountReplyDescriptor = $convert.base64 '9jb3VudBgCIAEoDVIIbWF4Q291bnQSGAoHcGVyY2VudBgDIAEoAlIHcGVyY2VudBI4Cgl0aW1l' 'c3RhbXAYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgl0aW1lc3RhbXA='); +@$core.Deprecated('Use listStudentClubRequestDescriptor instead') +const ListStudentClubRequest$json = { + '1': 'ListStudentClubRequest', +}; + +/// Descriptor for `ListStudentClubRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List listStudentClubRequestDescriptor = $convert.base64Decode( + 'ChZMaXN0U3R1ZGVudENsdWJSZXF1ZXN0'); + +@$core.Deprecated('Use listStudentClubReplyDescriptor instead') +const ListStudentClubReply$json = { + '1': 'ListStudentClubReply', + '2': [ + {'1': 'collections', '3': 1, '4': 3, '5': 11, '6': '.api.StudentClubCollection', '10': 'collections'}, + ], +}; + +/// Descriptor for `ListStudentClubReply`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List listStudentClubReplyDescriptor = $convert.base64Decode( + 'ChRMaXN0U3R1ZGVudENsdWJSZXBseRI8Cgtjb2xsZWN0aW9ucxgBIAMoCzIaLmFwaS5TdHVkZW' + '50Q2x1YkNvbGxlY3Rpb25SC2NvbGxlY3Rpb25z'); + +@$core.Deprecated('Use studentClubDescriptor instead') +const StudentClub$json = { + '1': 'StudentClub', + '2': [ + {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'}, + {'1': 'description', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'description', '17': true}, + {'1': 'link_url', '3': 3, '4': 1, '5': 9, '9': 1, '10': 'linkUrl', '17': true}, + {'1': 'cover_url', '3': 4, '4': 1, '5': 9, '9': 2, '10': 'coverUrl', '17': true}, + ], + '8': [ + {'1': '_description'}, + {'1': '_link_url'}, + {'1': '_cover_url'}, + ], +}; + +/// Descriptor for `StudentClub`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List studentClubDescriptor = $convert.base64Decode( + 'CgtTdHVkZW50Q2x1YhISCgRuYW1lGAEgASgJUgRuYW1lEiUKC2Rlc2NyaXB0aW9uGAIgASgJSA' + 'BSC2Rlc2NyaXB0aW9uiAEBEh4KCGxpbmtfdXJsGAMgASgJSAFSB2xpbmtVcmyIAQESIAoJY292' + 'ZXJfdXJsGAQgASgJSAJSCGNvdmVyVXJsiAEBQg4KDF9kZXNjcmlwdGlvbkILCglfbGlua191cm' + 'xCDAoKX2NvdmVyX3VybA=='); + +@$core.Deprecated('Use studentClubCollectionDescriptor instead') +const StudentClubCollection$json = { + '1': 'StudentClubCollection', + '2': [ + {'1': 'title', '3': 1, '4': 1, '5': 9, '10': 'title'}, + {'1': 'description', '3': 2, '4': 1, '5': 9, '10': 'description'}, + {'1': 'clubs', '3': 3, '4': 3, '5': 11, '6': '.api.StudentClub', '10': 'clubs'}, + ], +}; + +/// Descriptor for `StudentClubCollection`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List studentClubCollectionDescriptor = $convert.base64Decode( + 'ChVTdHVkZW50Q2x1YkNvbGxlY3Rpb24SFAoFdGl0bGUYASABKAlSBXRpdGxlEiAKC2Rlc2NyaX' + 'B0aW9uGAIgASgJUgtkZXNjcmlwdGlvbhImCgVjbHVicxgDIAMoCzIQLmFwaS5TdHVkZW50Q2x1' + 'YlIFY2x1YnM='); + diff --git a/protos/tumdev/campus_backend.proto b/protos/tumdev/campus_backend.proto index 5a3348d7..861c8a5b 100644 --- a/protos/tumdev/campus_backend.proto +++ b/protos/tumdev/campus_backend.proto @@ -146,6 +146,11 @@ service Campus { rpc DeleteDevice(DeleteDeviceRequest) returns (DeleteDeviceReply) { option (google.api.http) = {delete: "/device/{device_id}"}; } + + // Delete a device from push notifications + rpc ListStudentClub(ListStudentClubRequest) returns (ListStudentClubReply) { + option (google.api.http) = {delete: "/student_clubs"}; + } } enum DeviceType { @@ -559,3 +564,22 @@ message GetCanteenHeadCountReply { // A time stamp indicating how up to date the response is. Only valid in case percent != -1. google.protobuf.Timestamp timestamp = 4; } +message ListStudentClubRequest {} +message ListStudentClubReply { + repeated StudentClubCollection collections = 1; +} +message StudentClub { + // The name of the club + string name = 1; + // How the club describes itsself + optional string description = 2; + // Where the clubs main internet presence is + optional string link_url = 3; + // Where to find a image for this club + optional string cover_url = 4; +} +message StudentClubCollection { + string title = 1; + string description = 2; + repeated StudentClub clubs = 3; +} From 1120e28cd656dda3b65c07320f0a0bd28d54c765 Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Thu, 25 Jul 2024 16:37:18 +0200 Subject: [PATCH 05/27] Chore: Update Protos to v0.9.0 (#265) From 2c30bddb1aa10a21b4e3b2b461b36552c140687e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Tue, 30 Jul 2024 12:30:54 +0200 Subject: [PATCH 06/27] Bump App Version --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 8e9c9ef1..403da27c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: campus_flutter description: "A new Flutter project." publish_to: 'none' -version: 5.0.5+1 +version: 5.1.0+1 environment: sdk: '>=3.2.3 <4.0.0' From 1ee6f842b59348f22200dd842b088963de5b2818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:48:26 +0200 Subject: [PATCH 07/27] Bump Dependencies --- ios/Podfile.lock | 51 ++++----- pubspec.lock | 263 +++++++++++++++++++++++++---------------------- 2 files changed, 166 insertions(+), 148 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 1f59c81b..aea068bc 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,28 +1,28 @@ PODS: - device_info_plus (0.0.1): - Flutter - - Firebase/CoreOnly (10.28.0): - - FirebaseCore (= 10.28.0) - - Firebase/Crashlytics (10.28.0): + - Firebase/CoreOnly (10.29.0): + - FirebaseCore (= 10.29.0) + - Firebase/Crashlytics (10.29.0): - Firebase/CoreOnly - - FirebaseCrashlytics (~> 10.28.0) - - Firebase/RemoteConfig (10.28.0): + - FirebaseCrashlytics (~> 10.29.0) + - Firebase/RemoteConfig (10.29.0): - Firebase/CoreOnly - - FirebaseRemoteConfig (~> 10.28.0) - - firebase_core (3.2.0): - - Firebase/CoreOnly (= 10.28.0) + - FirebaseRemoteConfig (~> 10.29.0) + - firebase_core (3.3.0): + - Firebase/CoreOnly (= 10.29.0) - Flutter - - firebase_crashlytics (4.0.3): - - Firebase/Crashlytics (= 10.28.0) + - firebase_crashlytics (4.0.4): + - Firebase/Crashlytics (= 10.29.0) - firebase_core - Flutter - - firebase_remote_config (5.0.3): - - Firebase/RemoteConfig (= 10.28.0) + - firebase_remote_config (5.0.4): + - Firebase/RemoteConfig (= 10.29.0) - firebase_core - Flutter - FirebaseABTesting (10.29.0): - FirebaseCore (~> 10.0) - - FirebaseCore (10.28.0): + - FirebaseCore (10.29.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.12) - GoogleUtilities/Logger (~> 7.12) @@ -30,7 +30,7 @@ PODS: - FirebaseCore (~> 10.0) - FirebaseCoreInternal (10.29.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseCrashlytics (10.28.1): + - FirebaseCrashlytics (10.29.0): - FirebaseCore (~> 10.5) - FirebaseInstallations (~> 10.0) - FirebaseRemoteConfigInterop (~> 10.23) @@ -44,7 +44,7 @@ PODS: - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/UserDefaults (~> 7.8) - PromisesObjC (~> 2.1) - - FirebaseRemoteConfig (10.28.0): + - FirebaseRemoteConfig (10.29.0): - FirebaseABTesting (~> 10.0) - FirebaseCore (~> 10.0) - FirebaseInstallations (~> 10.0) @@ -70,8 +70,11 @@ PODS: - Flutter - geolocator_apple (1.2.0): - Flutter + - Google-Maps-iOS-Utils (5.0.0): + - GoogleMaps (~> 8.0) - google_maps_flutter_ios (0.0.1): - Flutter + - Google-Maps-iOS-Utils (< 7.0, >= 5.0) - GoogleMaps (< 10.0, >= 8.4) - GoogleDataTransport (9.4.1): - GoogleUtilities/Environment (~> 7.7) @@ -180,6 +183,7 @@ SPEC REPOS: - FirebaseRemoteConfigInterop - FirebaseSessions - FirebaseSharedSwift + - Google-Maps-iOS-Utils - GoogleDataTransport - GoogleMaps - GoogleUtilities @@ -232,17 +236,17 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d - Firebase: 5121c624121af81cbc81df3bda414b3c28c4f3c3 - firebase_core: a9d0180d5285527884d07a41eb4a9ec9ed12cdb6 - firebase_crashlytics: 12b2b1ecfc50f6c551c68e491ae156b2b7d41273 - firebase_remote_config: 5f92bfc62c3ef2c657bf3d703ffa4be29082280f + Firebase: cec914dab6fd7b1bd8ab56ea07ce4e03dd251c2d + firebase_core: 57aeb91680e5d5e6df6b888064be7c785f146efb + firebase_crashlytics: e3d3e0c99bad5aaab5908385133dea8ec344693f + firebase_remote_config: 622c7e72a9349b7db48658ea902d9f2f1f2d7aaa FirebaseABTesting: d87f56707159bae64e269757a6e963d490f2eebe - FirebaseCore: 857dc1c6dd1255675047404d8466f7dfaac5d779 + FirebaseCore: 30e9c1cbe3d38f5f5e75f48bfcea87d7c358ec16 FirebaseCoreExtension: 705ca5b14bf71d2564a0ddc677df1fc86ffa600f FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934 - FirebaseCrashlytics: f51e12b93f8e1134bbed602ed22df33804d55ccf + FirebaseCrashlytics: 34647b41e18de773717fdd348a22206f2f9bc774 FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd - FirebaseRemoteConfig: f0879a8dccf4e8905716ed849569130efaeab3e2 + FirebaseRemoteConfig: 48ef3f243742a8d72422ccfc9f986e19d7de53fd FirebaseRemoteConfigInterop: 6efda51fb5e2f15b16585197e26eaa09574e8a4d FirebaseSessions: dbd14adac65ce996228652c1fc3a3f576bdf3ecc FirebaseSharedSwift: 20530f495084b8d840f78a100d8c5ee613375f6e @@ -250,7 +254,8 @@ SPEC CHECKSUMS: flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 geolocator_apple: 6cbaf322953988e009e5ecb481f07efece75c450 - google_maps_flutter_ios: 5bc2be60ad012e79b182ce0fb0ef5030a50fb03e + Google-Maps-iOS-Utils: 66d6de12be1ce6d3742a54661e7a79cb317a9321 + google_maps_flutter_ios: e31555a04d1986ab130f2b9f24b6cdc861acc6d3 GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 diff --git a/pubspec.lock b/pubspec.lock index fcc5b007..672f2bc1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,26 +5,31 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 url: "https://pub.dev" source: hosted - version: "67.0.0" + version: "72.0.0" _flutterfire_internals: dependency: transitive description: name: _flutterfire_internals - sha256: b46f62516902afb04befa4b30eb6a12ac1f58ca8cb25fb9d632407259555dd3d + sha256: b1595874fbc8f7a50da90f5d8f327bb0bfd6a95dc906c390efe991540c3b54aa url: "https://pub.dev" source: hosted - version: "1.3.39" + version: "1.3.40" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.2" analyzer: dependency: transitive description: name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 url: "https://pub.dev" source: hosted - version: "6.4.1" + version: "6.7.0" analyzer_plugin: dependency: transitive description: @@ -133,18 +138,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + sha256: dd09dd4e2b078992f42aac7f1a622f01882a8492fef08486b27ddde929c19f04 url: "https://pub.dev" source: hosted - version: "2.4.11" + version: "2.4.12" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe + sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 url: "https://pub.dev" source: hosted - version: "7.3.1" + version: "7.3.2" built_collection: dependency: transitive description: @@ -165,26 +170,26 @@ packages: dependency: "direct main" description: name: cached_network_image - sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" + sha256: "4a5d8d2c728b0f3d0245f69f921d7be90cae4c2fd5288f773088672c0893f819" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.0" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" + sha256: ff0c949e323d2a1b52be73acce5b4a7b04063e61414c8ca542dbba47281630a7 url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.1.0" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - sha256: "205d6a9f1862de34b93184f22b9d2d94586b2f05c581d546695e3d8f6a805cd7" + sha256: "6322dde7a5ad92202e64df659241104a43db20ed594c41ca18de1014598d7996" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" characters: dependency: transitive description: @@ -253,10 +258,10 @@ packages: dependency: transitive description: name: coverage - sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" + sha256: "576aaab8b1abdd452e0f656c3e73da9ead9d7880e15bdc494189d9c1a1baf0db" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.0" crypto: dependency: transitive description: @@ -285,10 +290,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "93429694c9253d2871b3af80cf11b3cbb5c65660d402ed7bf69854ce4a089f82" + sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 url: "https://pub.dev" source: hosted - version: "10.1.1" + version: "10.1.2" device_info_plus_platform_interface: dependency: transitive description: @@ -373,66 +378,66 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "5159984ce9b70727473eb388394650677c02c925aaa6c9439905e1f30966a4d5" + sha256: "3187f4f8e49968573fd7403011dca67ba95aae419bc0d8131500fae160d94f92" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.3.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: "1003a5a03a61fc9a22ef49f37cbcb9e46c86313a7b2e7029b9390cf8c6fc32cb" + sha256: "3c3a1e92d6f4916c32deea79c4a7587aa0e9dbbe5889c7a16afcf005a485ee02" url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "5.2.0" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: "23509cb3cddfb3c910c143279ac3f07f06d3120f7d835e4a5d4b42558e978712" + sha256: e8d1e22de72cb21cdcfc5eed7acddab3e99cd83f3b317f54f7a96c32f25fd11e url: "https://pub.dev" source: hosted - version: "2.17.3" + version: "2.17.4" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: da32da3b441d1bee73ca990085a3ae174b9fb3585229f02a278a2ea42454d784 + sha256: "30260e1b8ad1464b41ca4531b44ce63d752daaf2f12c92ca6cdcd82b270abecc" url: "https://pub.dev" source: hosted - version: "4.0.3" + version: "4.0.4" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: b7567106ed57bbadaa0610774cc17a10b82ed04a1aba99790f303385ac4ba78f + sha256: a75e1826d92ea4e86e4a753c7b5d64b844a362676fa653185f1581c859186d18 url: "https://pub.dev" source: hosted - version: "3.6.39" + version: "3.6.40" firebase_remote_config: dependency: "direct main" description: name: firebase_remote_config - sha256: aa150fcbaa1fe5afcb912ccf6a059f1a8ef8566dceccaa45ff72c8498ca2103e + sha256: "62e86ed64370c382a2f872fbcabcae591c404776eb84685eb535bab53c0c00d5" url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "5.0.4" firebase_remote_config_platform_interface: dependency: transitive description: name: firebase_remote_config_platform_interface - sha256: "0c4f4b473074ab37b069360629998dbc7175c334afc249051d8ad590521741a8" + sha256: "80973fa763b7c9a0fc0596afed7063f2378de2cf2d37b017254e613160b43135" url: "https://pub.dev" source: hosted - version: "1.4.39" + version: "1.4.40" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web - sha256: "45fcb61f5bd46eada6dc11d7167512e3441db50cfadd05394272fc1fdce4a999" + sha256: "14ba362bdcf7abda12fa9060f2ebae7d342153e4d619007071e98cd557ce29a3" url: "https://pub.dev" source: hosted - version: "1.6.11" + version: "1.6.12" fixnum: dependency: transitive description: @@ -450,10 +455,10 @@ packages: dependency: transitive description: name: flutter_cache_manager - sha256: ceff65d74d907b1b772e22cf04daad60fb472461638977d9fae8b00a63e01e3d + sha256: a77f77806a790eb9ba0118a5a3a936e81c4fea2b61533033b2b0c3d50bbde5ea url: "https://pub.dev" source: hosted - version: "3.3.3" + version: "3.4.0" flutter_colorpicker: dependency: "direct main" description: @@ -659,66 +664,66 @@ packages: dependency: "direct main" description: name: go_router - sha256: "39dd52168d6c59984454183148dc3a5776960c61083adfc708cc79a7b3ce1ba8" + sha256: ddc16d34b0d74cb313986918c0f0885a7ba2fc24d8fb8419de75f0015144ccfe url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.2.3" google_identity_services_web: dependency: transitive description: name: google_identity_services_web - sha256: c6a67eb2117d3954a95afe307c3347d5b7ead5f5ef78bd94b1a62d161f6335a8 + sha256: "5be191523702ba8d7a01ca97c17fca096822ccf246b0a9f11923a6ded06199b6" url: "https://pub.dev" source: hosted - version: "0.3.1+3" + version: "0.3.1+4" google_maps: dependency: transitive description: name: google_maps - sha256: "47eef3836b49bb030d5cb3afc60b8451408bf34cf753e571b645d6529eb4251a" + sha256: "463b38e5a92a05cde41220a11fd5eef3847031fef3e8cf295ac76ec453246907" url: "https://pub.dev" source: hosted - version: "7.1.0" + version: "8.0.0" google_maps_flutter: dependency: "direct main" description: name: google_maps_flutter - sha256: acf0ec482d86b2ac55ade80597ce7f797a47971f5210ebfd030f0d58130e0a94 + sha256: "2e302fa3aaf4e2a297f0342d83ebc5e8e9f826e9a716aef473fe7f404ec630a7" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.9.0" google_maps_flutter_android: dependency: transitive description: name: google_maps_flutter_android - sha256: "5d444f4135559488d7ea325eae710ae3284e6951b1b61729a0ac026456fe1548" + sha256: a1aeca23cdd499496fb3271fb039a3c660d69e3cb8234df141d1c650844c01e0 url: "https://pub.dev" source: hosted - version: "2.12.1" + version: "2.14.0" google_maps_flutter_ios: dependency: transitive description: name: google_maps_flutter_ios - sha256: a6e3c6ecdda6c985053f944be13a0645ebb919da2ef0f5bc579c5e1670a5b2a8 + sha256: "3a484846fc56f15e47e3de1f5ea80a7ff2b31721d2faa88f390f3b3cf580c953" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.13.0" google_maps_flutter_platform_interface: dependency: transitive description: name: google_maps_flutter_platform_interface - sha256: bd60ca330e3c7763b95b477054adec338a522d982af73ecc520b232474063ac5 + sha256: "4f6930fd668bf5d40feb2695d5695dbc0c35e5542b557a34ad35be491686d2ba" url: "https://pub.dev" source: hosted - version: "2.8.0" + version: "2.9.0" google_maps_flutter_web: dependency: transitive description: name: google_maps_flutter_web - sha256: f3155c12119d8a5c2732fdf39ceb5cc095bc662059a03b4ea23294ecebe1d199 + sha256: ff39211bd25d7fad125d19f757eba85bd154460907cd4d135e07e3d0f98a4130 url: "https://pub.dev" source: hosted - version: "0.5.8" + version: "0.5.10" googleapis_auth: dependency: transitive description: @@ -824,14 +829,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" - js_wrapping: - dependency: transitive - description: - name: js_wrapping - sha256: e385980f7c76a8c1c9a560dfb623b890975841542471eade630b2871d243851c - url: "https://pub.dev" - source: hosted - version: "0.7.4" json_annotation: dependency: "direct main" description: @@ -852,18 +849,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.5" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" leak_tracker_testing: dependency: transitive description: @@ -904,6 +901,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.2" + macros: + dependency: transitive + description: + name: macros + sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" + url: "https://pub.dev" + source: hosted + version: "0.1.2-main.4" map_launcher: dependency: "direct main" description: @@ -924,18 +929,18 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" mime: dependency: transitive description: @@ -956,10 +961,10 @@ packages: dependency: transitive description: name: octo_image - sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" + sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.0" package_config: dependency: transitive description: @@ -972,10 +977,10 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "4de6c36df77ffbcef0a5aefe04669d33f2d18397fea228277b852a2d4e58e860" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "8.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: @@ -1004,10 +1009,10 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: @@ -1060,10 +1065,10 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: b29a799ca03be9f999aa6c39f7de5209482d638e6f857f6b93b0875c618b7e54 + sha256: eaf2a1ec4472775451e88ca6a7b86559ef2f1d1ed903942ed135e38ea0097dca url: "https://pub.dev" source: hosted - version: "12.0.7" + version: "12.0.8" permission_handler_apple: dependency: transitive description: @@ -1084,10 +1089,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: "48d4fcf201a1dad93ee869ab0d4101d084f49136ec82a8a06ed9cfeacab9fd20" + sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea url: "https://pub.dev" source: hosted - version: "4.2.1" + version: "4.2.2" permission_handler_windows: dependency: transitive description: @@ -1228,58 +1233,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + sha256: c272f9cabca5a81adc9b0894381e9c1def363e980f960fa903c604c471b22f68 url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.1" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "3d4571b3c5eb58ce52a419d86e655493d0bc3020672da79f72fa0c16ca3a8ec1" + sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974 url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.3.1" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" + sha256: "776786cff96324851b656777648f36ac772d88bc4c669acff97b7fce5de3c849" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.5.1" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "034650b71e73629ca08a0bd789fd1d83cc63c2d1e405946f7cef7bc37432f93a" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" + sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shelf: dependency: transitive description: @@ -1308,10 +1313,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" shimmer: dependency: "direct main" description: @@ -1457,34 +1462,34 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: "1daa6077a8fb388b692d5d050d58eaa4c01ef92f064a882eb330ef47dc51cf2e" + sha256: "6bd294a933eb2c71e0ff0b5cc2899603d46b55bdc9d7d327d7307403fdc9a81a" url: "https://pub.dev" source: hosted - version: "26.2.7" + version: "26.2.8" syncfusion_flutter_charts: dependency: "direct main" description: name: syncfusion_flutter_charts - sha256: d39bd6022083f66e24664d562c6416c25465fb2969df2080a9eac242ef371361 + sha256: ea8e9bfd2c4449e5743925f6f44642574c066e0391f7aae75f8328ae5f52fa05 url: "https://pub.dev" source: hosted - version: "26.2.7" + version: "26.2.8" syncfusion_flutter_core: dependency: "direct main" description: name: syncfusion_flutter_core - sha256: fd4d2cdbf8d0d1e3441817cb8a03f896566fad5187788957e78492fe16800388 + sha256: "266e71319ebf7e7a1b7cf8bf79b5f8ed2730f50d4de4bca6ff670a6b2dbba62a" url: "https://pub.dev" source: hosted - version: "26.2.7" + version: "26.2.8" syncfusion_flutter_datepicker: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: e541929ccf95a9188ef9f32dfca544f29b3fc222d4dc5da9cb1112305021a615 + sha256: "0a56939bd893332fe170eeba4f4adbe078a4a63fecf1613a7c664df434f72a4f" url: "https://pub.dev" source: hosted - version: "26.2.7" + version: "26.2.8" synchronized: dependency: transitive description: @@ -1505,26 +1510,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" + sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e" url: "https://pub.dev" source: hosted - version: "1.25.2" + version: "1.25.7" test_api: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.7.2" test_core: dependency: transitive description: name: test_core - sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" + sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.4" timeago: dependency: "direct main" description: @@ -1577,10 +1582,10 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "678979703e10d7862c551c736fe6b9f185261bddf141b46672063b99790bc700" + sha256: "94d8ad05f44c6d4e2ffe5567ab4d741b82d62e3c8e288cc1fcea45965edf47c9" url: "https://pub.dev" source: hosted - version: "6.3.7" + version: "6.3.8" url_launcher_ios: dependency: transitive description: @@ -1593,10 +1598,10 @@ packages: dependency: transitive description: name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.2.0" url_launcher_macos: dependency: transitive description: @@ -1617,10 +1622,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1705,18 +1710,18 @@ packages: dependency: transitive description: name: video_player_web - sha256: ff4d69a6614b03f055397c27a71c9d3ddea2b2a23d71b2ba0164f59ca32b8fe2 + sha256: "6dcdd298136523eaf7dfc31abaf0dfba9aa8a8dbc96670e87e9d42b6f2caf774" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" vm_service: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.2.4" watcher: dependency: transitive description: @@ -1733,14 +1738,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "3.0.1" webkit_inspection_protocol: dependency: transitive description: @@ -1753,10 +1766,10 @@ packages: dependency: transitive description: name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + sha256: "015002c060f1ae9f41a818f2d5640389cc05283e368be19dc8d77cecb43c40c9" url: "https://pub.dev" source: hosted - version: "5.5.1" + version: "5.5.3" win32_registry: dependency: transitive description: @@ -1799,5 +1812,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.5.0-259.0.dev <4.0.0" flutter: ">=3.22.0" From 6e23d95e59d07a3f347a094d2616c83f2da1b881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Sun, 11 Aug 2024 20:45:30 +0200 Subject: [PATCH 08/27] Migrate to Flutter 3.24.0 --- ios/Runner/AppDelegate.swift | 2 +- pubspec.lock | 50 +++++++++++++++++++----------------- pubspec.yaml | 10 ++++++++ 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 660673b0..67b3327c 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -2,7 +2,7 @@ import UIKit import Flutter import GoogleMaps -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/pubspec.lock b/pubspec.lock index 672f2bc1..0866902b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -42,10 +42,10 @@ packages: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: @@ -362,10 +362,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" file: dependency: transitive description: @@ -1017,10 +1017,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "490539678396d4c3c0b06efdaab75ae60675c3e0c66f72bc04c2e2c1e0e2abeb" + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" url: "https://pub.dev" source: hosted - version: "2.2.9" + version: "2.2.10" path_provider_foundation: dependency: transitive description: @@ -1249,10 +1249,10 @@ packages: dependency: transitive description: name: shared_preferences_foundation - sha256: "776786cff96324851b656777648f36ac772d88bc4c669acff97b7fce5de3c849" + sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f url: "https://pub.dev" source: hosted - version: "2.5.1" + version: "2.5.2" shared_preferences_linux: dependency: transitive description: @@ -1462,34 +1462,36 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: "6bd294a933eb2c71e0ff0b5cc2899603d46b55bdc9d7d327d7307403fdc9a81a" + sha256: eb9bddedd443e9b7f591d2f14babaf26ce146a3dd4d9f106a22c4775e194ba23 url: "https://pub.dev" source: hosted - version: "26.2.8" + version: "26.2.9" syncfusion_flutter_charts: dependency: "direct main" description: - name: syncfusion_flutter_charts - sha256: ea8e9bfd2c4449e5743925f6f44642574c066e0391f7aae75f8328ae5f52fa05 - url: "https://pub.dev" - source: hosted - version: "26.2.8" + path: "packages/syncfusion_flutter_charts" + ref: master + resolved-ref: a4364d6ba335b127d652a4de51b60cd026c53f15 + url: "https://github.com/jakobkoerber/flutter-widgets.git" + source: git + version: "25.2.5" syncfusion_flutter_core: dependency: "direct main" description: - name: syncfusion_flutter_core - sha256: "266e71319ebf7e7a1b7cf8bf79b5f8ed2730f50d4de4bca6ff670a6b2dbba62a" - url: "https://pub.dev" - source: hosted - version: "26.2.8" + path: "packages/syncfusion_flutter_core" + ref: master + resolved-ref: a4364d6ba335b127d652a4de51b60cd026c53f15 + url: "https://github.com/jakobkoerber/flutter-widgets.git" + source: git + version: "25.2.7" syncfusion_flutter_datepicker: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: "0a56939bd893332fe170eeba4f4adbe078a4a63fecf1613a7c664df434f72a4f" + sha256: "1c9469fbbeefb82b67dc8a48121e81a5860930516dec6c0ec33f3141063a1a07" url: "https://pub.dev" source: hosted - version: "26.2.8" + version: "26.2.9" synchronized: dependency: transitive description: @@ -1766,10 +1768,10 @@ packages: dependency: transitive description: name: win32 - sha256: "015002c060f1ae9f41a818f2d5640389cc05283e368be19dc8d77cecb43c40c9" + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" url: "https://pub.dev" source: hosted - version: "5.5.3" + version: "5.5.4" win32_registry: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 403da27c..3fed956d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -89,6 +89,16 @@ dependency_overrides: git: url: https://github.com/jakobkoerber/flutter_linkify ref: master + syncfusion_flutter_core: + git: + url: https://github.com/jakobkoerber/flutter-widgets.git + path: packages/syncfusion_flutter_core + ref: master + syncfusion_flutter_charts: + git: + url: https://github.com/jakobkoerber/flutter-widgets.git + path: packages/syncfusion_flutter_charts + ref: master dev_dependencies: # code generation From 681d31dfe1e71cef43d32cd2a5607a98752f63e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:59:53 +0200 Subject: [PATCH 09/27] Bump Dependencies --- android/settings.gradle | 2 +- ios/Podfile.lock | 186 ++++++++++++++++++++-------------------- pubspec.lock | 148 ++++++++++++++++---------------- pubspec.yaml | 2 +- 4 files changed, 168 insertions(+), 170 deletions(-) diff --git a/android/settings.gradle b/android/settings.gradle index 8d85322b..2aac169e 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -18,7 +18,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version '8.5.1' apply false + id "com.android.application" version '8.5.2' apply false id "org.jetbrains.kotlin.android" version "1.9.20" apply false id "org.jetbrains.kotlin.plugin.serialization" version "2.0.0" apply false id "com.google.gms.google-services" version "4.4.2" apply false diff --git a/ios/Podfile.lock b/ios/Podfile.lock index aea068bc..682798e8 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,68 +1,68 @@ PODS: - device_info_plus (0.0.1): - Flutter - - Firebase/CoreOnly (10.29.0): - - FirebaseCore (= 10.29.0) - - Firebase/Crashlytics (10.29.0): + - Firebase/CoreOnly (11.0.0): + - FirebaseCore (= 11.0.0) + - Firebase/Crashlytics (11.0.0): - Firebase/CoreOnly - - FirebaseCrashlytics (~> 10.29.0) - - Firebase/RemoteConfig (10.29.0): + - FirebaseCrashlytics (~> 11.0.0) + - Firebase/RemoteConfig (11.0.0): - Firebase/CoreOnly - - FirebaseRemoteConfig (~> 10.29.0) - - firebase_core (3.3.0): - - Firebase/CoreOnly (= 10.29.0) + - FirebaseRemoteConfig (~> 11.0.0) + - firebase_core (3.4.0): + - Firebase/CoreOnly (= 11.0.0) - Flutter - - firebase_crashlytics (4.0.4): - - Firebase/Crashlytics (= 10.29.0) + - firebase_crashlytics (4.1.0): + - Firebase/Crashlytics (= 11.0.0) - firebase_core - Flutter - - firebase_remote_config (5.0.4): - - Firebase/RemoteConfig (= 10.29.0) + - firebase_remote_config (5.1.0): + - Firebase/RemoteConfig (= 11.0.0) - firebase_core - Flutter - - FirebaseABTesting (10.29.0): - - FirebaseCore (~> 10.0) - - FirebaseCore (10.29.0): - - FirebaseCoreInternal (~> 10.0) - - GoogleUtilities/Environment (~> 7.12) - - GoogleUtilities/Logger (~> 7.12) - - FirebaseCoreExtension (10.29.0): - - FirebaseCore (~> 10.0) - - FirebaseCoreInternal (10.29.0): - - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseCrashlytics (10.29.0): - - FirebaseCore (~> 10.5) - - FirebaseInstallations (~> 10.0) - - FirebaseRemoteConfigInterop (~> 10.23) - - FirebaseSessions (~> 10.5) - - GoogleDataTransport (~> 9.2) - - GoogleUtilities/Environment (~> 7.8) - - nanopb (< 2.30911.0, >= 2.30908.0) - - PromisesObjC (~> 2.1) - - FirebaseInstallations (10.29.0): - - FirebaseCore (~> 10.0) - - GoogleUtilities/Environment (~> 7.8) - - GoogleUtilities/UserDefaults (~> 7.8) - - PromisesObjC (~> 2.1) - - FirebaseRemoteConfig (10.29.0): - - FirebaseABTesting (~> 10.0) - - FirebaseCore (~> 10.0) - - FirebaseInstallations (~> 10.0) - - FirebaseRemoteConfigInterop (~> 10.23) - - FirebaseSharedSwift (~> 10.0) - - GoogleUtilities/Environment (~> 7.8) - - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseRemoteConfigInterop (10.29.0) - - FirebaseSessions (10.29.0): - - FirebaseCore (~> 10.5) - - FirebaseCoreExtension (~> 10.0) - - FirebaseInstallations (~> 10.0) - - GoogleDataTransport (~> 9.2) - - GoogleUtilities/Environment (~> 7.13) - - GoogleUtilities/UserDefaults (~> 7.13) - - nanopb (< 2.30911.0, >= 2.30908.0) + - FirebaseABTesting (11.1.0): + - FirebaseCore (~> 11.0) + - FirebaseCore (11.0.0): + - FirebaseCoreInternal (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/Logger (~> 8.0) + - FirebaseCoreExtension (11.1.0): + - FirebaseCore (~> 11.0) + - FirebaseCoreInternal (11.1.0): + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - FirebaseCrashlytics (11.0.0): + - FirebaseCore (~> 11.0) + - FirebaseInstallations (~> 11.0) + - FirebaseRemoteConfigInterop (~> 11.0) + - FirebaseSessions (~> 11.0) + - GoogleDataTransport (~> 10.0) + - GoogleUtilities/Environment (~> 8.0) + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) + - FirebaseInstallations (11.1.0): + - FirebaseCore (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - PromisesObjC (~> 2.4) + - FirebaseRemoteConfig (11.0.0): + - FirebaseABTesting (~> 11.0) + - FirebaseCore (~> 11.0) + - FirebaseInstallations (~> 11.0) + - FirebaseRemoteConfigInterop (~> 11.0) + - FirebaseSharedSwift (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - FirebaseRemoteConfigInterop (11.1.0) + - FirebaseSessions (11.1.0): + - FirebaseCore (~> 11.0) + - FirebaseCoreExtension (~> 11.0) + - FirebaseInstallations (~> 11.0) + - GoogleDataTransport (~> 10.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - nanopb (~> 3.30910.0) - PromisesSwift (~> 2.1) - - FirebaseSharedSwift (10.29.0) + - FirebaseSharedSwift (11.1.0) - Flutter (1.0.0) - flutter_native_splash (0.0.1): - Flutter @@ -76,36 +76,34 @@ PODS: - Flutter - Google-Maps-iOS-Utils (< 7.0, >= 5.0) - GoogleMaps (< 10.0, >= 8.4) - - GoogleDataTransport (9.4.1): - - GoogleUtilities/Environment (~> 7.7) - - nanopb (< 2.30911.0, >= 2.30908.0) - - PromisesObjC (< 3.0, >= 1.2) + - GoogleDataTransport (10.1.0): + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) - GoogleMaps (8.4.0): - GoogleMaps/Maps (= 8.4.0) - GoogleMaps/Base (8.4.0) - GoogleMaps/Maps (8.4.0): - GoogleMaps/Base - - GoogleUtilities/Environment (7.13.3): + - GoogleUtilities/Environment (8.0.2): - GoogleUtilities/Privacy - - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.13.3): + - GoogleUtilities/Logger (8.0.2): - GoogleUtilities/Environment - GoogleUtilities/Privacy - - "GoogleUtilities/NSData+zlib (7.13.3)": + - "GoogleUtilities/NSData+zlib (8.0.2)": - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (7.13.3) - - GoogleUtilities/UserDefaults (7.13.3): + - GoogleUtilities/Privacy (8.0.2) + - GoogleUtilities/UserDefaults (8.0.2): - GoogleUtilities/Logger - GoogleUtilities/Privacy - home_widget (0.0.1): - Flutter - map_launcher (0.0.1): - Flutter - - nanopb (2.30910.0): - - nanopb/decode (= 2.30910.0) - - nanopb/encode (= 2.30910.0) - - nanopb/decode (2.30910.0) - - nanopb/encode (2.30910.0) + - nanopb (3.30910.0): + - nanopb/decode (= 3.30910.0) + - nanopb/encode (= 3.30910.0) + - nanopb/decode (3.30910.0) + - nanopb/encode (3.30910.0) - package_info_plus (0.4.5): - Flutter - path_provider_foundation (0.0.1): @@ -124,16 +122,16 @@ PODS: - sqflite (0.0.3): - Flutter - FlutterMacOS - - "sqlite3 (3.46.0+1)": - - "sqlite3/common (= 3.46.0+1)" - - "sqlite3/common (3.46.0+1)" - - "sqlite3/dbstatvtab (3.46.0+1)": + - "sqlite3 (3.46.1+1)": + - "sqlite3/common (= 3.46.1+1)" + - "sqlite3/common (3.46.1+1)" + - "sqlite3/dbstatvtab (3.46.1+1)": - sqlite3/common - - "sqlite3/fts5 (3.46.0+1)": + - "sqlite3/fts5 (3.46.1+1)": - sqlite3/common - - "sqlite3/perf-threadsafe (3.46.0+1)": + - "sqlite3/perf-threadsafe (3.46.1+1)": - sqlite3/common - - "sqlite3/rtree (3.46.0+1)": + - "sqlite3/rtree (3.46.1+1)": - sqlite3/common - sqlite3_flutter_libs (0.0.1): - Flutter @@ -236,32 +234,32 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d - Firebase: cec914dab6fd7b1bd8ab56ea07ce4e03dd251c2d - firebase_core: 57aeb91680e5d5e6df6b888064be7c785f146efb - firebase_crashlytics: e3d3e0c99bad5aaab5908385133dea8ec344693f - firebase_remote_config: 622c7e72a9349b7db48658ea902d9f2f1f2d7aaa - FirebaseABTesting: d87f56707159bae64e269757a6e963d490f2eebe - FirebaseCore: 30e9c1cbe3d38f5f5e75f48bfcea87d7c358ec16 - FirebaseCoreExtension: 705ca5b14bf71d2564a0ddc677df1fc86ffa600f - FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934 - FirebaseCrashlytics: 34647b41e18de773717fdd348a22206f2f9bc774 - FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd - FirebaseRemoteConfig: 48ef3f243742a8d72422ccfc9f986e19d7de53fd - FirebaseRemoteConfigInterop: 6efda51fb5e2f15b16585197e26eaa09574e8a4d - FirebaseSessions: dbd14adac65ce996228652c1fc3a3f576bdf3ecc - FirebaseSharedSwift: 20530f495084b8d840f78a100d8c5ee613375f6e + Firebase: 9f574c08c2396885b5e7e100ed4293d956218af9 + firebase_core: ceec591a66629daaee82d3321551692c4a871493 + firebase_crashlytics: e4f04180f443d5a8b56fbc0685bdbd7d90dd26f0 + firebase_remote_config: 2347e1cd52216f4b07f421068fb8dad42cca2803 + FirebaseABTesting: c2e22c3aab99afa81d0561708b2c1c356c556976 + FirebaseCore: 3cf438f431f18c12cdf2aaf64434648b63f7e383 + FirebaseCoreExtension: aa5c9779c2d0d39d83f1ceb3fdbafe80c4feecfa + FirebaseCoreInternal: adefedc9a88dbe393c4884640a73ec9e8e790f8c + FirebaseCrashlytics: 745d8f0221fe49c62865391d1bf56f5a12eeec0b + FirebaseInstallations: d0a8fea5a6fa91abc661591cf57c0f0d70863e57 + FirebaseRemoteConfig: fe8b7e6d6770fefbde27b0cac3f3deffba6e7326 + FirebaseRemoteConfigInterop: abf8b1bbc0bf1b84abd22b66746926410bf91a87 + FirebaseSessions: 78f137e68dc01ca71606169ba4ac73b98c13752a + FirebaseSharedSwift: 260a35e08943ec810d820a70bc0359136351d0c5 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 geolocator_apple: 6cbaf322953988e009e5ecb481f07efece75c450 Google-Maps-iOS-Utils: 66d6de12be1ce6d3742a54661e7a79cb317a9321 google_maps_flutter_ios: e31555a04d1986ab130f2b9f24b6cdc861acc6d3 - GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a + GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d - GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 + GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d home_widget: 0434835a4c9a75704264feff6be17ea40e0f0d57 map_launcher: 5fde49ac9a52672bf99da746599f507b4490d7b5 - nanopb: 438bc412db1928dac798aa6fd75726007be04262 + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 @@ -270,7 +268,7 @@ SPEC CHECKSUMS: quick_actions_ios: 56f3cbaa71e94f212838d1f9fe354bd0734779bf shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec - sqlite3: 292c3e1bfe89f64e51ea7fc7dab9182a017c8630 + sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3 diff --git a/pubspec.lock b/pubspec.lock index 0866902b..a7cfad53 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: b1595874fbc8f7a50da90f5d8f327bb0bfd6a95dc906c390efe991540c3b54aa + sha256: "9371d13b8ee442e3bfc08a24e3a1b3742c839abbfaf5eef11b79c4b862c89bf7" url: "https://pub.dev" source: hosted - version: "1.3.40" + version: "1.3.41" _macros: dependency: transitive description: dart @@ -178,10 +178,10 @@ packages: dependency: transitive description: name: cached_network_image_platform_interface - sha256: ff0c949e323d2a1b52be73acce5b4a7b04063e61414c8ca542dbba47281630a7 + sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "4.1.1" cached_network_image_web: dependency: transitive description: @@ -258,18 +258,18 @@ packages: dependency: transitive description: name: coverage - sha256: "576aaab8b1abdd452e0f656c3e73da9ead9d7880e15bdc494189d9c1a1baf0db" + sha256: c1fb2dce3c0085f39dc72668e85f8e0210ec7de05345821ff58530567df345a5 url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.2" crypto: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" csslib: dependency: transitive description: @@ -306,18 +306,18 @@ packages: dependency: "direct main" description: name: dio - sha256: e17f6b3097b8c51b72c74c9f071a605c47bcc8893839bd66732457a5ebe73714 + sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" url: "https://pub.dev" source: hosted - version: "5.5.0+1" + version: "5.6.0" dio_web_adapter: dependency: transitive description: name: dio_web_adapter - sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac" + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "2.0.0" drift: dependency: "direct main" description: @@ -378,66 +378,66 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "3187f4f8e49968573fd7403011dca67ba95aae419bc0d8131500fae160d94f92" + sha256: "06537da27db981947fa535bb91ca120b4e9cb59cb87278dbdde718558cafc9ff" url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "3.4.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: "3c3a1e92d6f4916c32deea79c4a7587aa0e9dbbe5889c7a16afcf005a485ee02" + sha256: f7d7180c7f99babd4b4c517754d41a09a4943a0f7a69b65c894ca5c68ba66315 url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.2.1" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: e8d1e22de72cb21cdcfc5eed7acddab3e99cd83f3b317f54f7a96c32f25fd11e + sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" url: "https://pub.dev" source: hosted - version: "2.17.4" + version: "2.17.5" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: "30260e1b8ad1464b41ca4531b44ce63d752daaf2f12c92ca6cdcd82b270abecc" + sha256: "4c9872020c0d97a161362ee6af7000cfdb8666234ddc290a15252ad379bb235a" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.1.0" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: a75e1826d92ea4e86e4a753c7b5d64b844a362676fa653185f1581c859186d18 + sha256: ede8a199ff03378857d3c8cbb7fa58d37c27bb5a6b75faf8415ff6925dcaae2a url: "https://pub.dev" source: hosted - version: "3.6.40" + version: "3.6.41" firebase_remote_config: dependency: "direct main" description: name: firebase_remote_config - sha256: "62e86ed64370c382a2f872fbcabcae591c404776eb84685eb535bab53c0c00d5" + sha256: b5c23fb7f5b8fd2338f512587a8d2714b5b81dc02508a1c16163c51c1aa41991 url: "https://pub.dev" source: hosted - version: "5.0.4" + version: "5.1.0" firebase_remote_config_platform_interface: dependency: transitive description: name: firebase_remote_config_platform_interface - sha256: "80973fa763b7c9a0fc0596afed7063f2378de2cf2d37b017254e613160b43135" + sha256: "127ebc8b7c905d211396cab3b0984e4436c6350400805d196607043b8984d09c" url: "https://pub.dev" source: hosted - version: "1.4.40" + version: "1.4.41" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web - sha256: "14ba362bdcf7abda12fa9060f2ebae7d342153e4d619007071e98cd557ce29a3" + sha256: "29dbff195c6225f957af541d325426f1697710ac36d169431c95bc92d985f4d2" url: "https://pub.dev" source: hosted - version: "1.6.12" + version: "1.6.13" fixnum: dependency: transitive description: @@ -455,10 +455,10 @@ packages: dependency: transitive description: name: flutter_cache_manager - sha256: a77f77806a790eb9ba0118a5a3a936e81c4fea2b61533033b2b0c3d50bbde5ea + sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" url: "https://pub.dev" source: hosted - version: "3.4.0" + version: "3.4.1" flutter_colorpicker: dependency: "direct main" description: @@ -502,10 +502,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "9d98bd47ef9d34e803d438f17fd32b116d31009f534a6fa5ce3a1167f189a6de" + sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda" url: "https://pub.dev" source: hosted - version: "2.0.21" + version: "2.0.22" flutter_riverpod: dependency: "direct main" description: @@ -664,10 +664,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: ddc16d34b0d74cb313986918c0f0885a7ba2fc24d8fb8419de75f0015144ccfe + sha256: "2ddb88e9ad56ae15ee144ed10e33886777eb5ca2509a914850a5faa7b52ff459" url: "https://pub.dev" source: hosted - version: "14.2.3" + version: "14.2.7" google_identity_services_web: dependency: transitive description: @@ -696,10 +696,10 @@ packages: dependency: transitive description: name: google_maps_flutter_android - sha256: a1aeca23cdd499496fb3271fb039a3c660d69e3cb8234df141d1c650844c01e0 + sha256: "60a005bf1ba8d178144e442f6e2d734b0ffc2cc800a05415388472f934ad6d6a" url: "https://pub.dev" source: hosted - version: "2.14.0" + version: "2.14.4" google_maps_flutter_ios: dependency: transitive description: @@ -745,18 +745,18 @@ packages: description: path: "." ref: master - resolved-ref: "0757d3ba6a41fbdc3682757fe4f915c5b9badfe0" + resolved-ref: e7ed6599b195276d9c395d04187e04b3cca9493d url: "https://github.com/jakobkoerber/grpc-dart.git" source: git - version: "4.0.0" + version: "4.0.1" home_widget: dependency: "direct main" description: name: home_widget - sha256: "2a0fdd6267ff975bd07bedf74686bd5577200f504f5de36527ac1b56bdbe68e3" + sha256: b313e3304c0429669fddf1286e1fbf61a64b873f38ba30b3eb890ef0d7560b12 url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.7.0" html: dependency: transitive description: @@ -913,10 +913,10 @@ packages: dependency: "direct main" description: name: map_launcher - sha256: af59b9f79f641022e06761c9d4217c6c57b9ef9020af2fdb23155ec87af79e61 + sha256: "7436d6ef9ae57ff15beafcedafe0a8f0604006cbecd2d26024c4cfb0158c2b9a" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.5.0" matcher: dependency: transitive description: @@ -945,10 +945,10 @@ packages: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" node_preamble: dependency: transitive description: @@ -1065,10 +1065,10 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: eaf2a1ec4472775451e88ca6a7b86559ef2f1d1ed903942ed135e38ea0097dca + sha256: "76e4ab092c1b240d31177bb64d2b0bea43f43d0e23541ec866151b9f7b2490fa" url: "https://pub.dev" source: hosted - version: "12.0.8" + version: "12.0.12" permission_handler_apple: dependency: transitive description: @@ -1081,10 +1081,10 @@ packages: dependency: transitive description: name: permission_handler_html - sha256: "6cac773d389e045a8d4f85418d07ad58ef9e42a56e063629ce14c4c26344de24" + sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 url: "https://pub.dev" source: hosted - version: "0.1.2" + version: "0.1.3+2" permission_handler_platform_interface: dependency: transitive description: @@ -1233,18 +1233,18 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: c272f9cabca5a81adc9b0894381e9c1def363e980f960fa903c604c471b22f68 + sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974 + sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" shared_preferences_foundation: dependency: transitive description: @@ -1350,10 +1350,10 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" source_maps: dependency: transitive description: @@ -1390,10 +1390,10 @@ packages: dependency: transitive description: name: sqflite_common - sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" + sha256: "7b41b6c3507854a159e24ae90a8e3e9cc01eb26a477c118d6dca065b5f55453e" url: "https://pub.dev" source: hosted - version: "2.5.4" + version: "2.5.4+2" sqlite3: dependency: "direct main" description: @@ -1462,10 +1462,10 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: eb9bddedd443e9b7f591d2f14babaf26ce146a3dd4d9f106a22c4775e194ba23 + sha256: "4a7c4c56d922cbfc1ba12535821bfa54f90ba93cbc88be46e22dfb853802139b" url: "https://pub.dev" source: hosted - version: "26.2.9" + version: "26.2.11+1" syncfusion_flutter_charts: dependency: "direct main" description: @@ -1488,18 +1488,18 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: "1c9469fbbeefb82b67dc8a48121e81a5860930516dec6c0ec33f3141063a1a07" + sha256: "4c4803408c5661393fab84d802137c6df0ef77c3ea8683b92d42a95efb47f149" url: "https://pub.dev" source: hosted - version: "26.2.9" + version: "26.2.11" synchronized: dependency: transitive description: name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + sha256: a824e842b8a054f91a728b783c177c1e4731f6b124f9192468457a8913371255 url: "https://pub.dev" source: hosted - version: "3.1.0+1" + version: "3.2.0" term_glyph: dependency: transitive description: @@ -1544,10 +1544,10 @@ packages: dependency: transitive description: name: timezone - sha256: a6ccda4a69a442098b602c44e61a1e2b4bf6f5516e875bbf0f427d5df14745d5 + sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" url: "https://pub.dev" source: hosted - version: "0.9.3" + version: "0.9.4" timing: dependency: transitive description: @@ -1584,10 +1584,10 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "94d8ad05f44c6d4e2ffe5567ab4d741b82d62e3c8e288cc1fcea45965edf47c9" + sha256: e35a698ac302dd68e41f73250bd9517fe3ab5fa4f18fe4647a0872db61bacbab url: "https://pub.dev" source: hosted - version: "6.3.8" + version: "6.3.10" url_launcher_ios: dependency: transitive description: @@ -1640,10 +1640,10 @@ packages: dependency: "direct main" description: name: uuid - sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90" + sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77 url: "https://pub.dev" source: hosted - version: "4.4.2" + version: "4.5.0" vector_graphics: dependency: transitive description: @@ -1688,10 +1688,10 @@ packages: dependency: transitive description: name: video_player_android - sha256: "4de50df9ee786f5891d3281e1e633d7b142ef1acf47392592eb91cba5d355849" + sha256: "101028b643a3b43ced72107aacdbc4d30d55365487751de001a36cf0d86038d1" url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.7.2" video_player_avfoundation: dependency: transitive description: @@ -1720,10 +1720,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "14.2.4" + version: "14.2.5" watcher: dependency: transitive description: @@ -1814,5 +1814,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.5.0-259.0.dev <4.0.0" - flutter: ">=3.22.0" + dart: ">=3.5.0 <4.0.0" + flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index 3fed956d..c54a9908 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,7 +34,7 @@ dependencies: flutter_staggered_grid_view: ^0.7.0 flutter_svg: ^2.0.9 flutter_linkify: ^6.0.0 - home_widget: ^0.6.0 + home_widget: ^0.7.0 auto_size_text: ^3.0.0 quick_actions: ^1.0.7 flutter_native_splash: ^2.2.19 From e1f5b05bfde775b08c551c3a83aba832fc3a8d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Sun, 1 Sep 2024 23:35:50 +0200 Subject: [PATCH 10/27] Add Campus Tab with Student Clubs, Movies and News --- .../images/placeholders/movie_placeholder.png | Bin 6575 -> 13364 bytes .../images/placeholders/news_placeholder.png | Bin 18449 -> 13080 bytes .../placeholders/student_club_placeholder.png | Bin 0 -> 9614 bytes assets/translations/de.json | 6 +- assets/translations/en.json | 6 +- devtools_options.yaml | 3 + lib/base/enums/shortcut_item.dart | 10 +- lib/base/routing/router.dart | 27 ++-- lib/base/routing/routes.dart | 15 ++- lib/base/theme/dark_theme.dart | 2 +- lib/base/theme/light_theme.dart | 2 +- lib/campusComponent/screen/campus_screen.dart | 21 +++ .../screen/student_clubs_screen.dart | 88 ++++++++++++ .../service/movie_service.dart | 4 +- .../service/news_service.dart | 8 +- .../service/student_club_service.dart | 16 +++ .../view/movie/movie_card_view.dart | 108 +++++++++++++++ .../view/movie}/movies_widget_view.dart | 43 ++++-- .../view/news/news_card_view.dart | 126 ++++++++++++++++++ .../view/news}/news_widget_view.dart | 48 +++++-- .../studentClub/student_club_item_view.dart | 77 +++++++++++ .../studentClub/student_club_widget_view.dart | 98 ++++++++++++++ .../viewmodel}/movies_viewmodel.dart | 2 +- .../viewmodel}/news_viewmodel.dart | 2 +- .../viewmodel/student_club_viewmodel.dart | 28 ++++ .../views/homeWidget/movie_card_view.dart | 95 ------------- lib/navigation_service.dart | 20 +-- lib/newsComponent/views/news_card_view.dart | 117 ---------------- .../movie_search_viewmodel.dart | 2 +- .../news_search_viewmodel.dart | 2 +- pubspec.lock | 20 +-- pubspec.yaml | 1 + 32 files changed, 704 insertions(+), 293 deletions(-) create mode 100644 assets/images/placeholders/student_club_placeholder.png create mode 100644 devtools_options.yaml create mode 100644 lib/campusComponent/screen/campus_screen.dart create mode 100644 lib/campusComponent/screen/student_clubs_screen.dart rename lib/{movieComponent => campusComponent}/service/movie_service.dart (86%) rename lib/{newsComponent => campusComponent}/service/news_service.dart (80%) create mode 100644 lib/campusComponent/service/student_club_service.dart create mode 100644 lib/campusComponent/view/movie/movie_card_view.dart rename lib/{movieComponent/views/homeWidget => campusComponent/view/movie}/movies_widget_view.dart (60%) create mode 100644 lib/campusComponent/view/news/news_card_view.dart rename lib/{newsComponent/views/homeWidget => campusComponent/view/news}/news_widget_view.dart (59%) create mode 100644 lib/campusComponent/view/studentClub/student_club_item_view.dart create mode 100644 lib/campusComponent/view/studentClub/student_club_widget_view.dart rename lib/{movieComponent/viewModel => campusComponent/viewmodel}/movies_viewmodel.dart (91%) rename lib/{newsComponent/viewModel => campusComponent/viewmodel}/news_viewmodel.dart (94%) create mode 100644 lib/campusComponent/viewmodel/student_club_viewmodel.dart delete mode 100644 lib/movieComponent/views/homeWidget/movie_card_view.dart delete mode 100644 lib/newsComponent/views/news_card_view.dart diff --git a/assets/images/placeholders/movie_placeholder.png b/assets/images/placeholders/movie_placeholder.png index fd74e36433b36112b7dfcf2b05ee222eb6ceb4f0..9b899e888b1ee48ad7192255195b9c83734cd866 100644 GIT binary patch literal 13364 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 literal 6575 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 Y+k=-F|8-^>zKlhi);rqetfe3MFLfb##{d8T literal 18449 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 rAb~$r|NFDze}7H==kLmI4^JkVEr(e3nW4B literal 0 HcmV?d00001 diff --git a/assets/translations/de.json b/assets/translations/de.json index 47317da2..5581c76d 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -221,5 +221,9 @@ "personNotFoundRecovery": "Überprüfe, ob du den Namen richtig eingegeben hast!", "invalidSearchRecovery": "Ein Suchbegriff mit weniger als 4 Zeichen darf keine Wildcards oder Sonderzeichen enthalten!", "tumOnlineDegraded": "TUMonline Services sind derzeit beeinträchtigt!", - "tumOnlineMaintenance": "TUMonline Services werden derzeit gewartet!" + "tumOnlineMaintenance": "TUMonline Services werden derzeit gewartet!", + "campus": "Campus", + "studies": "Studium", + "suggested": "Interessante {}", + "viewAll": "Alle ansehen" } diff --git a/assets/translations/en.json b/assets/translations/en.json index d91ca314..935c0427 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -221,5 +221,9 @@ "personNotFoundRecovery": "Make sure you entered the name correctly!", "invalidSearchRecovery": "A search string with less than 4 characters must not contain wildcards or special characters!", "tumOnlineDegraded": "TUMonline Services are currently degraded!", - "tumOnlineMaintenance": "TUMonline Services are currently under maintenance!" + "tumOnlineMaintenance": "TUMonline Services are currently under maintenance!", + "campus": "Campus", + "studies": "Studies", + "suggested": "Suggested {}", + "viewAll": "View All" } diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 00000000..fa0b357c --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/lib/base/enums/shortcut_item.dart b/lib/base/enums/shortcut_item.dart index 4c745e15..94025d81 100644 --- a/lib/base/enums/shortcut_item.dart +++ b/lib/base/enums/shortcut_item.dart @@ -7,7 +7,7 @@ enum ShortcutItemType { cafeterias(en: "Cafeterias", de: "Mensen"), studyRooms(en: "Study Rooms", de: "Lernräume"), calendar(en: "Calendar", de: "Kalendar"), - grades(en: "Grades", de: "Noten"); + studies(en: "Studies", de: "Studium"); final String en; final String? de; @@ -30,7 +30,7 @@ extension Routing on ShortcutItemType { case ShortcutItemType.cafeterias: case ShortcutItemType.studyRooms: case ShortcutItemType.calendar: - case ShortcutItemType.grades: + case ShortcutItemType.studies: return null; } } @@ -53,8 +53,8 @@ extension Routing on ShortcutItemType { return routes.studyRooms; case ShortcutItemType.calendar: return routes.calendar; - case ShortcutItemType.grades: - return routes.grades; + case ShortcutItemType.studies: + return routes.studies; } } } @@ -64,6 +64,6 @@ extension ActiveShortcuts on ShortcutItemType { ShortcutItemType.cafeterias, ShortcutItemType.studyRooms, ShortcutItemType.calendar, - ShortcutItemType.grades, + ShortcutItemType.studies, ]; } diff --git a/lib/base/routing/router.dart b/lib/base/routing/router.dart index 375ec242..ed39067f 100644 --- a/lib/base/routing/router.dart +++ b/lib/base/routing/router.dart @@ -5,14 +5,14 @@ import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/calendarComponent/model/calendar_event.dart'; import 'package:campus_flutter/calendarComponent/views/calendars_view.dart'; import 'package:campus_flutter/calendarComponent/views/event_creation_view.dart'; +import 'package:campus_flutter/campusComponent/screen/campus_screen.dart'; +import 'package:campus_flutter/campusComponent/screen/student_clubs_screen.dart'; import 'package:campus_flutter/departuresComponent/views/departures_details_view.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_form_view.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_success_view.dart'; -import 'package:campus_flutter/gradeComponent/views/grades_view.dart'; -import 'package:campus_flutter/homeComponent/home_screen.dart'; import 'package:campus_flutter/lectureComponent/model/lecture.dart'; import 'package:campus_flutter/lectureComponent/views/lecture_details_view.dart'; -import 'package:campus_flutter/lectureComponent/views/lectures_view.dart'; +import 'package:campus_flutter/homeComponent/home_screen.dart'; import 'package:campus_flutter/navigaTumComponent/model/navigatum_roomfinder_map.dart'; import 'package:campus_flutter/navigaTumComponent/views/navigatum_room_view.dart'; import 'package:campus_flutter/onboardingComponent/views/confirm_view.dart'; @@ -34,6 +34,7 @@ import 'package:campus_flutter/placesComponent/views/studyGroups/study_rooms_vie import 'package:campus_flutter/searchComponent/views/appWideSearch/search_scaffold.dart'; import 'package:campus_flutter/searchComponent/views/personRoomSearch/search_view.dart'; import 'package:campus_flutter/settingsComponent/views/settings_scaffold.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; @@ -79,9 +80,9 @@ final _router = GoRouter( StatefulShellBranch( routes: [ GoRoute( - path: grades, + path: studies, pageBuilder: (context, state) => const NoTransitionPage( - child: GradesView(), + child: Text("Studies"), ), ), ], @@ -89,9 +90,9 @@ final _router = GoRouter( StatefulShellBranch( routes: [ GoRoute( - path: lectures, - pageBuilder: (context, state) => const NoTransitionPage( - child: LecturesView(), + path: calendar, + pageBuilder: (context, state) => NoTransitionPage( + child: CalendarsView(), ), ), ], @@ -99,9 +100,9 @@ final _router = GoRouter( StatefulShellBranch( routes: [ GoRoute( - path: calendar, - pageBuilder: (context, state) => NoTransitionPage( - child: CalendarsView(), + path: campus, + pageBuilder: (context, state) => const NoTransitionPage( + child: CampusScreen(), ), ), ], @@ -163,6 +164,10 @@ final _router = GoRouter( scrollController: null, ), ), + GoRoute( + path: studentClubs, + builder: (context, state) => const StudentClubsScreen(), + ), GoRoute( path: studyRooms, builder: (context, state) => const StudyRoomsScaffold(), diff --git a/lib/base/routing/routes.dart b/lib/base/routing/routes.dart index 95ebc0d1..795438ec 100644 --- a/lib/base/routing/routes.dart +++ b/lib/base/routing/routes.dart @@ -10,11 +10,8 @@ const cafeteriaWidget = "/cafeteriaWidget"; const closestStudyRoom = "/closestStudyRoom"; const fullScreenImage = "/fullScreenImage"; -/// Grades tab -const grades = "/grades"; - -/// Lectures tab -const lectures = "/lectures"; +/// Studies tab +const studies = "/studies"; const lectureDetails = "/lectureDetails"; /// Calendar tab @@ -22,10 +19,14 @@ const calendar = "/calendar"; const calendarDetails = "/calendarDetails"; const eventCreation = "$calendar/eventCreation"; +/// Campus tab +const campus = "/campus"; +const studentClubs = "/studentClubs"; + /// Places tab const places = "/places"; -const campus = "/campus"; -const campusMap = "$campus/map"; +const place = "/place"; +const campusMap = "$place/map"; const cafeterias = "/cafeterias"; const studyRooms = "/studyRooms"; diff --git a/lib/base/theme/dark_theme.dart b/lib/base/theme/dark_theme.dart index 24fd999f..d1acd023 100644 --- a/lib/base/theme/dark_theme.dart +++ b/lib/base/theme/dark_theme.dart @@ -74,7 +74,7 @@ ThemeData darkTheme(BuildContext context) { cardTheme: CardTheme( color: const Color(0xff252525), surfaceTintColor: Colors.transparent, - elevation: 1, + shadowColor: Colors.transparent, margin: EdgeInsets.symmetric( vertical: context.halfPadding, horizontal: context.padding, diff --git a/lib/base/theme/light_theme.dart b/lib/base/theme/light_theme.dart index b9631e3f..32e6cbb0 100644 --- a/lib/base/theme/light_theme.dart +++ b/lib/base/theme/light_theme.dart @@ -76,7 +76,7 @@ ThemeData lightTheme(BuildContext context) { cardTheme: CardTheme( color: Colors.white, surfaceTintColor: Colors.transparent, - elevation: 1, + shadowColor: Colors.transparent, margin: EdgeInsets.symmetric( vertical: context.halfPadding, horizontal: context.padding, diff --git a/lib/campusComponent/screen/campus_screen.dart b/lib/campusComponent/screen/campus_screen.dart new file mode 100644 index 00000000..382077c6 --- /dev/null +++ b/lib/campusComponent/screen/campus_screen.dart @@ -0,0 +1,21 @@ +import 'package:campus_flutter/campusComponent/view/studentClub/student_club_widget_view.dart'; +import 'package:campus_flutter/campusComponent/view/movie/movies_widget_view.dart'; +import 'package:campus_flutter/campusComponent/view/news/news_widget_view.dart'; +import 'package:flutter/material.dart'; + +class CampusScreen extends StatelessWidget { + const CampusScreen({super.key}); + + @override + Widget build(BuildContext context) { + return const SingleChildScrollView( + child: Column( + children: [ + NewsWidgetView(), + StudentClubWidgetView(), + MovieWidgetView(), + ], + ), + ); + } +} diff --git a/lib/campusComponent/screen/student_clubs_screen.dart b/lib/campusComponent/screen/student_clubs_screen.dart new file mode 100644 index 00000000..df9b559e --- /dev/null +++ b/lib/campusComponent/screen/student_clubs_screen.dart @@ -0,0 +1,88 @@ +import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; +import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; +import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; +import 'package:campus_flutter/campusComponent/view/studentClub/student_club_item_view.dart'; +import 'package:campus_flutter/campusComponent/viewmodel/student_club_viewmodel.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class StudentClubsScreen extends ConsumerWidget { + const StudentClubsScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return StreamBuilder( + stream: ref.watch(studentClubViewModel).collections, + builder: (context, snapshot) { + return DefaultTabController( + length: snapshot.data?.length ?? 0, + child: Scaffold( + appBar: AppBar( + title: const Text("Student Clubs"), + bottom: TabBar( + isScrollable: true, + tabs: [ + for (var collection + in snapshot.data ?? []) + Tab(text: collection.title), + ], + ), + ), + body: () { + if (snapshot.hasData) { + return TabBarView( + children: [ + for (var collection in snapshot.data!) + Padding( + padding: const EdgeInsets.only( + top: 15, + left: 11, + right: 11, + ), + child: GridView.count( + crossAxisCount: 2, + children: [ + for (var studentClub in collection.clubs) + Padding( + padding: const EdgeInsets.all(4.0), + child: Container( + decoration: const ShapeDecoration( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all( + Radius.circular(28.0), + ), + ), + ), + clipBehavior: Clip.antiAlias, + child: StudentClubItemView( + studentClub: studentClub, + ), + ), + ), + ], + ), + ), + ], + ); + } else if (snapshot.hasError) { + return Center( + child: ErrorHandlingRouter( + error: snapshot.error, + errorHandlingViewType: ErrorHandlingViewType.fullScreen, + ), + ); + } else { + return const Center( + child: DelayedLoadingIndicator( + name: "Student Clubs", + ), + ); + } + }(), + ), + ); + }, + ); + } +} diff --git a/lib/movieComponent/service/movie_service.dart b/lib/campusComponent/service/movie_service.dart similarity index 86% rename from lib/movieComponent/service/movie_service.dart rename to lib/campusComponent/service/movie_service.dart index 63098f6e..987e0ca3 100644 --- a/lib/movieComponent/service/movie_service.dart +++ b/lib/campusComponent/service/movie_service.dart @@ -8,8 +8,8 @@ class MovieService { bool forcedRefresh, ) async { final start = DateTime.now(); - GrpcClient restClient = getIt(); - final response = await restClient.listMovies( + GrpcClient grpcClient = getIt(); + final response = await grpcClient.listMovies( ListMoviesRequest( oldestDateAt: Timestamp.fromDateTime( DateTime(start.year, start.month, start.day), diff --git a/lib/newsComponent/service/news_service.dart b/lib/campusComponent/service/news_service.dart similarity index 80% rename from lib/newsComponent/service/news_service.dart rename to lib/campusComponent/service/news_service.dart index 718e5e99..f44462ed 100644 --- a/lib/newsComponent/service/news_service.dart +++ b/lib/campusComponent/service/news_service.dart @@ -8,8 +8,8 @@ class NewsService { bool forcedRefresh, ) async { final start = DateTime.now(); - GrpcClient restClient = getIt(); - final news = await restClient.listNews( + GrpcClient grpcClient = getIt(); + final news = await grpcClient.listNews( ListNewsRequest( oldestDateAt: Timestamp.fromDateTime( DateTime(start.year, start.month, start.day) @@ -22,8 +22,8 @@ class NewsService { static Future<(DateTime?, List)> fetchNews(bool forcedRefresh) async { final start = DateTime.now(); - GrpcClient restClient = getIt(); - final news = await restClient.listNews(ListNewsRequest()); + GrpcClient grpcClient = getIt(); + final news = await grpcClient.listNews(ListNewsRequest()); return (start, news.news); } } diff --git a/lib/campusComponent/service/student_club_service.dart b/lib/campusComponent/service/student_club_service.dart new file mode 100644 index 00000000..b959c8cb --- /dev/null +++ b/lib/campusComponent/service/student_club_service.dart @@ -0,0 +1,16 @@ +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; +import 'package:campus_flutter/base/networking/base/grpc_client.dart'; +import 'package:campus_flutter/main.dart'; + +class StudentClubService { + static Future<(DateTime?, List)> fetchStudentClubs( + bool forceRefresh, + ) async { + final start = DateTime.now(); + GrpcClient grpcClient = getIt(); + final response = await grpcClient.listStudentClub( + ListStudentClubRequest(), + ); + return (start, response.collections); + } +} diff --git a/lib/campusComponent/view/movie/movie_card_view.dart b/lib/campusComponent/view/movie/movie_card_view.dart new file mode 100644 index 00000000..3dd77c61 --- /dev/null +++ b/lib/campusComponent/view/movie/movie_card_view.dart @@ -0,0 +1,108 @@ +import 'package:campus_flutter/base/util/string_parser.dart'; +import 'package:campus_flutter/base/util/url_launcher.dart'; +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; +import 'package:campus_flutter/campusComponent/viewmodel/movies_viewmodel.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class MovieCardView extends ConsumerWidget { + const MovieCardView({ + super.key, + required this.movie, + this.isCarousel = false, + }); + + final Movie movie; + final bool isCarousel; + + @override + Widget build(BuildContext context, WidgetRef ref) { + if (isCarousel) { + return body(context); + } else { + return InkWell( + onTap: () { + UrlLauncher.urlString(movie.additionalInformationUrl, ref); + }, + child: body(context), + ); + } + } + + Widget body(BuildContext context) { + return Container( + color: Colors.white, + child: AspectRatio( + aspectRatio: 250 / 470, + child: Column( + children: [ + Expanded( + flex: 8, + child: ClipRRect( + borderRadius: + const BorderRadius.vertical(top: Radius.circular(10)), + child: CachedNetworkImage( + imageUrl: movie.coverUrl.toString(), + fit: BoxFit.fill, + height: double.infinity, + width: double.infinity, + fadeOutDuration: Duration.zero, + fadeInDuration: Duration.zero, + placeholder: (context, string) => Image.asset( + "assets/images/placeholders/movie_placeholder.png", + fit: BoxFit.fill, + height: double.infinity, + width: double.infinity, + ), + errorWidget: (context, url, error) => Image.asset( + "assets/images/placeholders/movie_placeholder.png", + fit: BoxFit.fill, + height: double.infinity, + width: double.infinity, + ), + ), + ), + ), + Expanded( + flex: 2, + child: Padding( + padding: const EdgeInsets.all(5.0), + child: SizedBox( + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Text( + movie.movieTitle, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: Theme.of(context) + .textTheme + .bodyMedium + ?.copyWith(fontWeight: FontWeight.w500), + ), + ), + Expanded( + child: Text( + StringParser.dateFormatter( + movie.date.toDateTime(), + context, + ), + style: Theme.of(context).textTheme.bodySmall, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/movieComponent/views/homeWidget/movies_widget_view.dart b/lib/campusComponent/view/movie/movies_widget_view.dart similarity index 60% rename from lib/movieComponent/views/homeWidget/movies_widget_view.dart rename to lib/campusComponent/view/movie/movies_widget_view.dart index 10bbf534..27f4aad6 100644 --- a/lib/movieComponent/views/homeWidget/movies_widget_view.dart +++ b/lib/campusComponent/view/movie/movies_widget_view.dart @@ -1,24 +1,24 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; -import 'package:campus_flutter/base/util/horizontal_slider.dart'; import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; +import 'package:campus_flutter/base/util/url_launcher.dart'; import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; -import 'package:campus_flutter/movieComponent/viewModel/movies_viewmodel.dart'; -import 'package:campus_flutter/movieComponent/views/homeWidget/movie_card_view.dart'; +import 'package:campus_flutter/campusComponent/viewmodel/movies_viewmodel.dart'; +import 'package:campus_flutter/campusComponent/view/movie/movie_card_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -class MoviesHomeWidget extends ConsumerStatefulWidget { - const MoviesHomeWidget({super.key}); +class MovieWidgetView extends ConsumerStatefulWidget { + const MovieWidgetView({super.key}); @override ConsumerState createState() => _MoviesHomeWidgetState(); } -class _MoviesHomeWidgetState extends ConsumerState { +class _MoviesHomeWidgetState extends ConsumerState { @override void initState() { ref.read(movieViewModel).fetch(false); @@ -41,12 +41,31 @@ class _MoviesHomeWidgetState extends ConsumerState { Widget body(AsyncSnapshot?> snapshot) { if (snapshot.hasData) { - return HorizontalSlider.height( - data: snapshot.data!, - height: MediaQuery.of(context).size.height * 0.34, - child: (data) { - return MovieCardView(movie: data); - }, + final height = MediaQuery.of(context).size.height * 0.34; + final width = height * 250 / 470; + return SizedBox( + height: height, + child: Padding( + padding: const EdgeInsets.only(left: 11), + child: CarouselView( + itemExtent: width, + shrinkExtent: width, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + children: [ + for (var data in snapshot.data!) + MovieCardView( + movie: data, + isCarousel: true, + ), + ], + onTap: (index) => UrlLauncher.urlString( + snapshot.data![index].additionalInformationUrl, + ref, + ), + ), + ), ); } else if (snapshot.hasError) { return SizedBox( diff --git a/lib/campusComponent/view/news/news_card_view.dart b/lib/campusComponent/view/news/news_card_view.dart new file mode 100644 index 00000000..cfa5c68f --- /dev/null +++ b/lib/campusComponent/view/news/news_card_view.dart @@ -0,0 +1,126 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:campus_flutter/base/util/string_parser.dart'; +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; +import 'package:campus_flutter/base/routing/routes.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; + +class NewsCardView extends ConsumerWidget { + const NewsCardView({ + super.key, + required this.news, + required this.width, + this.isCarousel = false, + }); + + final News news; + final double width; + final bool isCarousel; + + @override + Widget build(BuildContext context, WidgetRef ref) { + final imageUrl = news.imageUrl.toString().contains("src_1.png") + ? news.link.toString() + : news.imageUrl.toString(); + if (isCarousel) { + return body(imageUrl, context); + } else { + return InkWell( + onTap: () { + if (imageUrl.isNotEmpty) { + context.push(networkImage, extra: (imageUrl, null)); + } + }, + child: body(imageUrl, context), + ); + } + } + + Widget body(String imageUrl, BuildContext context) { + return Container( + color: Colors.white, + child: AspectRatio( + aspectRatio: 1.1, + child: Column( + children: [ + Expanded( + flex: 3, + child: ClipRRect( + borderRadius: const BorderRadius.vertical( + top: Radius.circular(10.0), + ), + child: CachedNetworkImage( + imageUrl: imageUrl, + fadeOutDuration: Duration.zero, + fadeInDuration: Duration.zero, + placeholder: (context, string) => Image.asset( + "assets/images/placeholders/news_placeholder.png", + fit: BoxFit.fill, + height: double.infinity, + width: double.infinity, + ), + errorWidget: (context, url, error) => Image.asset( + "assets/images/placeholders/news_placeholder.png", + fit: BoxFit.fill, + height: double.infinity, + width: double.infinity, + ), + height: double.infinity, + width: double.infinity, + fit: BoxFit.fill, + ), + ), + ), + Expanded( + flex: 2, + child: Padding( + padding: const EdgeInsets.all(10.0), + child: SizedBox( + width: MediaQuery.of(context).size.width, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 3, + child: Text( + news.title, + style: Theme.of(context) + .textTheme + .titleMedium + ?.copyWith( + fontWeight: FontWeight.w500, + color: Theme.of(context).colorScheme.onSurface, + ), + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + ), + Expanded( + child: Text( + StringParser.dateFormatter( + news.date.toDateTime(), + context, + ), + style: Theme.of(context).textTheme.bodySmall, + ), + ), + Expanded( + child: Text( + news.sourceTitle, + style: Theme.of(context).textTheme.bodySmall, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/newsComponent/views/homeWidget/news_widget_view.dart b/lib/campusComponent/view/news/news_widget_view.dart similarity index 59% rename from lib/newsComponent/views/homeWidget/news_widget_view.dart rename to lib/campusComponent/view/news/news_widget_view.dart index d05530f8..cf318417 100644 --- a/lib/newsComponent/views/homeWidget/news_widget_view.dart +++ b/lib/campusComponent/view/news/news_widget_view.dart @@ -1,13 +1,14 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; +import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; -import 'package:campus_flutter/base/util/horizontal_slider.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; +import 'package:campus_flutter/campusComponent/view/news/news_card_view.dart'; import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; -import 'package:campus_flutter/newsComponent/viewModel/news_viewmodel.dart'; -import 'package:campus_flutter/newsComponent/views/news_card_view.dart'; +import 'package:campus_flutter/campusComponent/viewmodel/news_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; class NewsWidgetView extends ConsumerStatefulWidget { const NewsWidgetView({super.key}); @@ -35,15 +36,38 @@ class _NewsWidgetViewState extends ConsumerState { if (fiveNews.isNotEmpty) { return LayoutBuilder( builder: (context, constraints) { - return HorizontalSlider.height( - data: fiveNews, - height: 300, - child: (news) { - return NewsCardView( - news: news, - width: constraints.maxWidth * 0.8, - ); - }, + final width = constraints.maxWidth * 0.8; + const height = 300.00; + return SizedBox( + height: height, + child: Padding( + padding: const EdgeInsets.only(left: 11), + child: CarouselView( + itemExtent: width, + shrinkExtent: width, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + children: [ + for (var news in fiveNews) + NewsCardView( + news: news, + width: 0, + isCarousel: true, + ), + ], + onTap: (index) { + final news = snapshot.data![index]; + final imageUrl = + news.imageUrl.toString().contains("src_1.png") + ? news.link.toString() + : news.imageUrl.toString(); + if (imageUrl.isNotEmpty) { + context.push(networkImage, extra: (imageUrl, null)); + } + }, + ), + ), ); }, ); diff --git a/lib/campusComponent/view/studentClub/student_club_item_view.dart b/lib/campusComponent/view/studentClub/student_club_item_view.dart new file mode 100644 index 00000000..4dfefabf --- /dev/null +++ b/lib/campusComponent/view/studentClub/student_club_item_view.dart @@ -0,0 +1,77 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; +import 'package:campus_flutter/base/util/url_launcher.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_svg/svg.dart'; + +class StudentClubItemView extends ConsumerWidget { + const StudentClubItemView({ + super.key, + required this.studentClub, + this.isCarousel = false, + }); + + final StudentClub studentClub; + final bool isCarousel; + + @override + Widget build(BuildContext context, WidgetRef ref) { + if (isCarousel) { + return body(); + } else { + return InkWell( + onTap: () => UrlLauncher.urlString(studentClub.linkUrl, ref), + child: body(), + ); + } + } + + Widget body() { + return Container( + color: Colors.white, + child: Column( + children: [ + if (studentClub.coverUrl.contains("svg")) + Expanded( + flex: 4, + child: SvgPicture.network( + studentClub.coverUrl, + fit: BoxFit.cover, + placeholderBuilder: (context) => Image.asset( + "assets/images/placeholders/student_club_placeholder.png", + fit: BoxFit.cover, + ), + ), + ), + if (!studentClub.coverUrl.contains("svg")) + Expanded( + flex: 4, + child: CachedNetworkImage( + imageUrl: studentClub.coverUrl, + fit: BoxFit.cover, + errorWidget: (context, _, __) => Image.asset( + "assets/images/placeholders/student_club_placeholder.png", + fit: BoxFit.cover, + ), + ), + ), + Expanded( + flex: 2, + child: Center( + child: Padding( + padding: const EdgeInsets.all(5), + child: Text( + studentClub.name, + textAlign: TextAlign.center, + maxLines: 2, + style: const TextStyle(fontWeight: FontWeight.w500), + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/campusComponent/view/studentClub/student_club_widget_view.dart b/lib/campusComponent/view/studentClub/student_club_widget_view.dart new file mode 100644 index 00000000..2accee17 --- /dev/null +++ b/lib/campusComponent/view/studentClub/student_club_widget_view.dart @@ -0,0 +1,98 @@ +import 'package:campus_flutter/base/routing/routes.dart'; +import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; +import 'package:campus_flutter/base/util/url_launcher.dart'; +import 'package:campus_flutter/campusComponent/view/studentClub/student_club_item_view.dart'; +import 'package:campus_flutter/campusComponent/viewmodel/student_club_viewmodel.dart'; +import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/campusComponent/viewmodel/movies_viewmodel.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; + +class StudentClubWidgetView extends ConsumerStatefulWidget { + const StudentClubWidgetView({super.key}); + + @override + ConsumerState createState() => + _StudentClubWidgetViewState(); +} + +class _StudentClubWidgetViewState extends ConsumerState { + @override + void initState() { + ref.read(studentClubViewModel).fetchStudentClubs(false); + ref.read(movieViewModel).fetch(false); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return WidgetFrameView( + titleWidget: Row( + children: [ + Text( + context.tr("suggested", args: ["Student Clubs"]), + style: Theme.of(context).textTheme.titleMedium, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const Spacer(), + InkWell( + child: Text( + context.tr("viewAll"), + style: Theme.of(context).textTheme.titleMedium, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + onTap: () => context.push(studentClubs), + ), + ], + ), + //title: "Suggested Student Clubs", + child: SizedBox( + height: 200, + child: StreamBuilder( + stream: ref.watch(studentClubViewModel).suggestions, + builder: (context, snapshot) { + if (snapshot.hasData) { + return Padding( + padding: const EdgeInsets.only(left: 11), + child: CarouselView( + itemExtent: 200, + shrinkExtent: 200, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + children: [ + for (var studentClub in snapshot.data!) + StudentClubItemView( + studentClub: studentClub, + isCarousel: true, + ), + ], + onTap: (index) => UrlLauncher.urlString( + snapshot.data![index].linkUrl, + ref, + ), + ), + ); + } else if (snapshot.hasError) { + return const Card( + child: DelayedLoadingIndicator( + name: "Student Clubs", + ), + ); + } else { + return const Card( + child: DelayedLoadingIndicator( + name: "Student Clubs", + ), + ); + } + }, + ), + ), + ); + } +} diff --git a/lib/movieComponent/viewModel/movies_viewmodel.dart b/lib/campusComponent/viewmodel/movies_viewmodel.dart similarity index 91% rename from lib/movieComponent/viewModel/movies_viewmodel.dart rename to lib/campusComponent/viewmodel/movies_viewmodel.dart index 1e714d27..71357b27 100644 --- a/lib/movieComponent/viewModel/movies_viewmodel.dart +++ b/lib/campusComponent/viewmodel/movies_viewmodel.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; -import 'package:campus_flutter/movieComponent/service/movie_service.dart'; +import 'package:campus_flutter/campusComponent/service/movie_service.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; diff --git a/lib/newsComponent/viewModel/news_viewmodel.dart b/lib/campusComponent/viewmodel/news_viewmodel.dart similarity index 94% rename from lib/newsComponent/viewModel/news_viewmodel.dart rename to lib/campusComponent/viewmodel/news_viewmodel.dart index 49cfd66d..c82996d4 100644 --- a/lib/newsComponent/viewModel/news_viewmodel.dart +++ b/lib/campusComponent/viewmodel/news_viewmodel.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; -import 'package:campus_flutter/newsComponent/service/news_service.dart'; +import 'package:campus_flutter/campusComponent/service/news_service.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; diff --git a/lib/campusComponent/viewmodel/student_club_viewmodel.dart b/lib/campusComponent/viewmodel/student_club_viewmodel.dart new file mode 100644 index 00000000..6058845f --- /dev/null +++ b/lib/campusComponent/viewmodel/student_club_viewmodel.dart @@ -0,0 +1,28 @@ +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; +import 'package:campus_flutter/campusComponent/service/student_club_service.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:rxdart/rxdart.dart'; + +final studentClubViewModel = Provider((ref) => StudentClubViewModel()); + +class StudentClubViewModel { + final BehaviorSubject?> collections = + BehaviorSubject.seeded(null); + final BehaviorSubject?> suggestions = + BehaviorSubject.seeded(null); + + Future fetchStudentClubs(bool forceRefresh) { + return StudentClubService.fetchStudentClubs(forceRefresh).then( + (value) { + collections.add(value.$2); + final studentClubs = value.$2.expand((e) => e.clubs).toList(); + studentClubs.shuffle(); + suggestions.add(studentClubs.take(5).toList()); + }, + onError: (error) { + collections.addError(error); + suggestions.addError(error); + }, + ); + } +} diff --git a/lib/movieComponent/views/homeWidget/movie_card_view.dart b/lib/movieComponent/views/homeWidget/movie_card_view.dart deleted file mode 100644 index 2d57d96a..00000000 --- a/lib/movieComponent/views/homeWidget/movie_card_view.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:campus_flutter/base/util/string_parser.dart'; -import 'package:campus_flutter/base/util/url_launcher.dart'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; -import 'package:campus_flutter/movieComponent/viewModel/movies_viewmodel.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -class MovieCardView extends ConsumerWidget { - const MovieCardView({super.key, required this.movie}); - - final Movie movie; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return GestureDetector( - onTap: () { - UrlLauncher.urlString(movie.additionalInformationUrl, ref); - }, - child: Card( - margin: const EdgeInsets.all(0), - child: AspectRatio( - aspectRatio: 250 / 470, - child: Column( - children: [ - Expanded( - flex: 8, - child: ClipRRect( - borderRadius: - const BorderRadius.vertical(top: Radius.circular(10)), - child: CachedNetworkImage( - imageUrl: movie.coverUrl.toString(), - fit: BoxFit.fill, - height: double.infinity, - width: double.infinity, - fadeOutDuration: Duration.zero, - fadeInDuration: Duration.zero, - placeholder: (context, string) => Image.asset( - "assets/images/placeholders/movie_placeholder.png", - fit: BoxFit.fill, - height: double.infinity, - width: double.infinity, - ), - errorWidget: (context, url, error) => Image.asset( - "assets/images/placeholders/movie_placeholder.png", - fit: BoxFit.fill, - height: double.infinity, - width: double.infinity, - ), - ), - ), - ), - Expanded( - flex: 2, - child: Padding( - padding: const EdgeInsets.all(5.0), - child: SizedBox( - width: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Text( - movie.movieTitle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: Theme.of(context) - .textTheme - .bodyMedium - ?.copyWith(fontWeight: FontWeight.w500), - ), - ), - Expanded( - child: Text( - StringParser.dateFormatter( - movie.date.toDateTime(), - context, - ), - style: Theme.of(context).textTheme.bodySmall, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ), - ), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/navigation_service.dart b/lib/navigation_service.dart index f9832927..c3d69586 100644 --- a/lib/navigation_service.dart +++ b/lib/navigation_service.dart @@ -34,17 +34,17 @@ class NavigationService { ); case 1: return Text( - context.tr("grades"), + context.tr("studies"), style: Theme.of(context).textTheme.titleLarge, ); case 2: return Text( - context.tr("lectures"), + context.tr("calendar"), style: Theme.of(context).textTheme.titleLarge, ); case 3: return Text( - context.tr("calendar"), + context.tr("campus"), style: Theme.of(context).textTheme.titleLarge, ); case 4: @@ -63,7 +63,7 @@ class NavigationService { Widget? floatingActionButton(int index, WidgetRef ref, BuildContext context) { switch (index) { - case 3: + case 2: if (ref.read(onboardingViewModel).credentials.value == Credentials.tumId) { return FloatingActionButton( @@ -149,18 +149,18 @@ class NavigationService { NavigationDestination( icon: const Icon(Icons.school_outlined), selectedIcon: const Icon(Icons.school), - label: context.tr("grades"), - ), - NavigationDestination( - icon: const Icon(Icons.class_outlined), - selectedIcon: const Icon(Icons.class_), - label: context.tr("lectures"), + label: context.tr("studies"), ), NavigationDestination( icon: const Icon(Icons.calendar_month_outlined), selectedIcon: const Icon(Icons.calendar_month), label: context.tr("calendar"), ), + NavigationDestination( + icon: const Icon(Icons.campaign_outlined), + selectedIcon: const Icon(Icons.campaign), + label: context.tr("campus"), + ), NavigationDestination( icon: const Icon(Icons.place_outlined), selectedIcon: const Icon(Icons.place), diff --git a/lib/newsComponent/views/news_card_view.dart b/lib/newsComponent/views/news_card_view.dart deleted file mode 100644 index 081890c4..00000000 --- a/lib/newsComponent/views/news_card_view.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:campus_flutter/base/util/string_parser.dart'; -import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; -import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:go_router/go_router.dart'; - -class NewsCardView extends ConsumerWidget { - const NewsCardView({super.key, required this.news, required this.width}); - - final News news; - final double width; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final imageUrl = news.imageUrl.toString().contains("src_1.png") - ? news.link.toString() - : news.imageUrl.toString(); - return InkWell( - onTap: () { - if (imageUrl.isNotEmpty) { - context.push(networkImage, extra: (imageUrl, null)); - } - }, - child: AspectRatio( - aspectRatio: 1.1, - child: Card( - margin: const EdgeInsets.symmetric(vertical: 5.0), - child: Column( - children: [ - Expanded( - flex: 3, - child: ClipRRect( - borderRadius: const BorderRadius.vertical( - top: Radius.circular(10.0), - ), - child: CachedNetworkImage( - imageUrl: imageUrl, - fadeOutDuration: Duration.zero, - fadeInDuration: Duration.zero, - placeholder: (context, string) => Image.asset( - "assets/images/placeholders/news_placeholder.png", - fit: BoxFit.fill, - height: double.infinity, - width: double.infinity, - ), - errorWidget: (context, url, error) => Image.asset( - "assets/images/placeholders/news_placeholder.png", - fit: BoxFit.fill, - height: double.infinity, - width: double.infinity, - ), - height: double.infinity, - width: double.infinity, - fit: BoxFit.fill, - ), - ), - ), - Expanded( - flex: 2, - child: Padding( - padding: const EdgeInsets.all(10.0), - child: SizedBox( - width: MediaQuery.of(context).size.width, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 3, - child: Text( - news.title, - style: Theme.of(context) - .textTheme - .titleMedium - ?.copyWith( - fontWeight: FontWeight.w500, - color: - Theme.of(context).colorScheme.onSurface, - ), - maxLines: 2, - overflow: TextOverflow.ellipsis, - ), - ), - Expanded( - child: Text( - StringParser.dateFormatter( - news.date.toDateTime(), - context, - ), - style: Theme.of(context).textTheme.bodySmall, - ), - ), - Expanded( - child: Text( - context.tr( - "noEntriesFound", - args: [news.sourceTitle], - ), - style: Theme.of(context).textTheme.bodySmall, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ), - ), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/searchComponent/viewModels/searchableViewModels/movie_search_viewmodel.dart b/lib/searchComponent/viewModels/searchableViewModels/movie_search_viewmodel.dart index 5a354a6f..844016bf 100644 --- a/lib/searchComponent/viewModels/searchableViewModels/movie_search_viewmodel.dart +++ b/lib/searchComponent/viewModels/searchableViewModels/movie_search_viewmodel.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; -import 'package:campus_flutter/movieComponent/service/movie_service.dart'; +import 'package:campus_flutter/campusComponent/service/movie_service.dart'; import 'package:campus_flutter/searchComponent/model/comparison_token.dart'; import 'package:campus_flutter/searchComponent/model/search_exception.dart'; import 'package:campus_flutter/searchComponent/protocols/global_search.dart'; diff --git a/lib/searchComponent/viewModels/searchableViewModels/news_search_viewmodel.dart b/lib/searchComponent/viewModels/searchableViewModels/news_search_viewmodel.dart index 2388a0a0..bc2e16a9 100644 --- a/lib/searchComponent/viewModels/searchableViewModels/news_search_viewmodel.dart +++ b/lib/searchComponent/viewModels/searchableViewModels/news_search_viewmodel.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; -import 'package:campus_flutter/newsComponent/service/news_service.dart'; +import 'package:campus_flutter/campusComponent/service/news_service.dart'; import 'package:campus_flutter/searchComponent/model/comparison_token.dart'; import 'package:campus_flutter/searchComponent/model/search_exception.dart'; import 'package:campus_flutter/searchComponent/protocols/global_search.dart'; diff --git a/pubspec.lock b/pubspec.lock index a7cfad53..61b11646 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -306,10 +306,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" url: "https://pub.dev" source: hosted - version: "5.6.0" + version: "5.7.0" dio_web_adapter: dependency: transitive description: @@ -696,10 +696,10 @@ packages: dependency: transitive description: name: google_maps_flutter_android - sha256: "60a005bf1ba8d178144e442f6e2d734b0ffc2cc800a05415388472f934ad6d6a" + sha256: "075f550650a907a85d00d1e48f135e9cc326f1519652eb5f8caafebacabf7727" url: "https://pub.dev" source: hosted - version: "2.14.4" + version: "2.14.5" google_maps_flutter_ios: dependency: transitive description: @@ -1462,10 +1462,10 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: "4a7c4c56d922cbfc1ba12535821bfa54f90ba93cbc88be46e22dfb853802139b" + sha256: e4b26cd68204e1caaf0a02c5092b8bb3227e331deadbdb1e4a64ea4cfa8dc008 url: "https://pub.dev" source: hosted - version: "26.2.11+1" + version: "26.2.13" syncfusion_flutter_charts: dependency: "direct main" description: @@ -1488,10 +1488,10 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: "4c4803408c5661393fab84d802137c6df0ef77c3ea8683b92d42a95efb47f149" + sha256: "7989608f897edb61ea156d743ca31024eba688679a85f633f8203d17eafab83c" url: "https://pub.dev" source: hosted - version: "26.2.11" + version: "26.2.13" synchronized: dependency: transitive description: @@ -1688,10 +1688,10 @@ packages: dependency: transitive description: name: video_player_android - sha256: "101028b643a3b43ced72107aacdbc4d30d55365487751de001a36cf0d86038d1" + sha256: "38d8fe136c427abdce68b5e8c3c08ea29d7a794b453c7a51b12ecfad4aad9437" url: "https://pub.dev" source: hosted - version: "2.7.2" + version: "2.7.3" video_player_avfoundation: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index c54a9908..f921be78 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -125,6 +125,7 @@ flutter: - assets/images/placeholders/portrait_placeholder.png - assets/images/placeholders/movie_placeholder.png - assets/images/placeholders/news_placeholder.png + - assets/images/placeholders/student_club_placeholder.png - assets/images/errors/error.svg - assets/lottieFiles/gradient_background_blue_red.json - assets/lottieFiles/gradient_background_blue_white.json From 437a5fa4840c1412207758d4ee88959b3b88f9f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 5 Sep 2024 23:42:43 +0200 Subject: [PATCH 11/27] Merge Grade and Lecture Tab into Studies Tab --- android/settings.gradle | 4 +- lib/base/routing/router.dart | 8 +- .../views/permission_check_view.dart | 4 +- .../grades_search_viewmodel.dart | 4 +- .../lecture_search_viewmodel.dart | 4 +- .../personal_lecture_seach_viewmodel.dart | 4 +- .../resultViews/grade_search_result_view.dart | 4 +- .../lecture_search_result_view.dart | 4 +- .../personal_lecture_search_result_view.dart | 4 +- .../views/appearance_settings_view.dart | 2 +- .../model/average_grade.dart | 0 .../model/average_grade.g.dart | 0 .../model/grade.dart | 0 .../model/grade.g.dart | 0 .../model/lecture.dart | 0 .../model/lecture.g.dart | 0 .../model/lecture_details.dart | 0 .../model/lecture_details.g.dart | 0 .../screen/studies_screen.dart | 78 +++++++++++++++++++ .../service}/grade_service.dart | 4 +- .../service}/lecture_details_service.dart | 2 +- .../service}/lecture_search_service.dart | 2 +- .../service}/lecture_service.dart | 2 +- .../view/grade}/chart_view.dart | 2 +- .../view/grade}/grade_rectangle.dart | 2 +- .../view/grade}/grade_view.dart | 4 +- .../view/grade}/grades_view.dart | 40 +--------- .../view/lecture}/lecture_view.dart | 2 +- .../view/lecture}/lectures_view.dart | 6 +- .../basic_lecture_info_row_view.dart | 0 .../basic_lecture_info_view.dart | 8 +- .../detailed_lecture_info_row_view.dart | 0 .../detailed_lecture_info_view.dart | 6 +- .../lectureDetail}/lecture_details_view.dart | 14 ++-- .../lecture_info_card_view.dart | 0 .../lectureDetail}/lecture_links_view.dart | 4 +- .../lecture_meeting_info_view.dart | 6 +- .../view}/semester_view.dart | 26 ++++--- .../viewModel}/grade_viewmodel.dart | 6 +- .../viewModel}/lecture_details_viewmodel.dart | 6 +- .../viewModel}/lecture_viewmodel.dart | 4 +- 41 files changed, 160 insertions(+), 106 deletions(-) rename lib/{gradeComponent => studiesComponent}/model/average_grade.dart (100%) rename lib/{gradeComponent => studiesComponent}/model/average_grade.g.dart (100%) rename lib/{gradeComponent => studiesComponent}/model/grade.dart (100%) rename lib/{gradeComponent => studiesComponent}/model/grade.g.dart (100%) rename lib/{lectureComponent => studiesComponent}/model/lecture.dart (100%) rename lib/{lectureComponent => studiesComponent}/model/lecture.g.dart (100%) rename lib/{lectureComponent => studiesComponent}/model/lecture_details.dart (100%) rename lib/{lectureComponent => studiesComponent}/model/lecture_details.g.dart (100%) create mode 100644 lib/studiesComponent/screen/studies_screen.dart rename lib/{gradeComponent/services => studiesComponent/service}/grade_service.dart (90%) rename lib/{lectureComponent/services => studiesComponent/service}/lecture_details_service.dart (93%) rename lib/{lectureComponent/services => studiesComponent/service}/lecture_search_service.dart (93%) rename lib/{lectureComponent/services => studiesComponent/service}/lecture_service.dart (93%) rename lib/{gradeComponent/views => studiesComponent/view/grade}/chart_view.dart (97%) rename lib/{gradeComponent/views => studiesComponent/view/grade}/grade_rectangle.dart (93%) rename lib/{gradeComponent/views => studiesComponent/view/grade}/grade_view.dart (90%) rename lib/{gradeComponent/views => studiesComponent/view/grade}/grades_view.dart (77%) rename lib/{lectureComponent/views => studiesComponent/view/lecture}/lecture_view.dart (96%) rename lib/{lectureComponent/views => studiesComponent/view/lecture}/lectures_view.dart (93%) rename lib/{lectureComponent/views => studiesComponent/view/lectureDetail}/basic_lecture_info_row_view.dart (100%) rename lib/{lectureComponent/views => studiesComponent/view/lectureDetail}/basic_lecture_info_view.dart (86%) rename lib/{lectureComponent/views => studiesComponent/view/lectureDetail}/detailed_lecture_info_row_view.dart (100%) rename lib/{lectureComponent/views => studiesComponent/view/lectureDetail}/detailed_lecture_info_view.dart (80%) rename lib/{lectureComponent/views => studiesComponent/view/lectureDetail}/lecture_details_view.dart (90%) rename lib/{lectureComponent/views => studiesComponent/view/lectureDetail}/lecture_info_card_view.dart (100%) rename lib/{lectureComponent/views => studiesComponent/view/lectureDetail}/lecture_links_view.dart (87%) rename lib/{lectureComponent/views => studiesComponent/view/lectureDetail}/lecture_meeting_info_view.dart (83%) rename lib/{lectureComponent/views => studiesComponent/view}/semester_view.dart (52%) rename lib/{gradeComponent/viewModels => studiesComponent/viewModel}/grade_viewmodel.dart (96%) rename lib/{lectureComponent/viewModels => studiesComponent/viewModel}/lecture_details_viewmodel.dart (86%) rename lib/{lectureComponent/viewModels => studiesComponent/viewModel}/lecture_viewmodel.dart (89%) diff --git a/android/settings.gradle b/android/settings.gradle index 2aac169e..b7a172e9 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -18,9 +18,9 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version '8.5.2' apply false + id "com.android.application" version '8.6.0' apply false id "org.jetbrains.kotlin.android" version "1.9.20" apply false - id "org.jetbrains.kotlin.plugin.serialization" version "2.0.0" apply false + id "org.jetbrains.kotlin.plugin.serialization" version "2.0.20" apply false id "com.google.gms.google-services" version "4.4.2" apply false id "com.google.firebase.crashlytics" version "3.0.2" apply false } diff --git a/lib/base/routing/router.dart b/lib/base/routing/router.dart index ed39067f..ae7fdbf1 100644 --- a/lib/base/routing/router.dart +++ b/lib/base/routing/router.dart @@ -10,8 +10,6 @@ import 'package:campus_flutter/campusComponent/screen/student_clubs_screen.dart' import 'package:campus_flutter/departuresComponent/views/departures_details_view.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_form_view.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_success_view.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_details_view.dart'; import 'package:campus_flutter/homeComponent/home_screen.dart'; import 'package:campus_flutter/navigaTumComponent/model/navigatum_roomfinder_map.dart'; import 'package:campus_flutter/navigaTumComponent/views/navigatum_room_view.dart'; @@ -34,7 +32,9 @@ import 'package:campus_flutter/placesComponent/views/studyGroups/study_rooms_vie import 'package:campus_flutter/searchComponent/views/appWideSearch/search_scaffold.dart'; import 'package:campus_flutter/searchComponent/views/personRoomSearch/search_view.dart'; import 'package:campus_flutter/settingsComponent/views/settings_scaffold.dart'; -import 'package:flutter/material.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/screen/studies_screen.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/lecture_details_view.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; @@ -82,7 +82,7 @@ final _router = GoRouter( GoRoute( path: studies, pageBuilder: (context, state) => const NoTransitionPage( - child: Text("Studies"), + child: StudiesScreen(), ), ), ], diff --git a/lib/onboardingComponent/views/permission_check_view.dart b/lib/onboardingComponent/views/permission_check_view.dart index 796fc79b..77cec8ae 100644 --- a/lib/onboardingComponent/views/permission_check_view.dart +++ b/lib/onboardingComponent/views/permission_check_view.dart @@ -1,8 +1,8 @@ import 'package:campus_flutter/base/util/custom_back_button.dart'; import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/calendarComponent/services/calendar_service.dart'; -import 'package:campus_flutter/gradeComponent/services/grade_service.dart'; -import 'package:campus_flutter/lectureComponent/services/lecture_service.dart'; +import 'package:campus_flutter/studiesComponent/service/grade_service.dart'; +import 'package:campus_flutter/studiesComponent/service/lecture_service.dart'; import 'package:campus_flutter/profileComponent/services/profile_service.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/searchComponent/viewModels/searchableViewModels/grades_search_viewmodel.dart b/lib/searchComponent/viewModels/searchableViewModels/grades_search_viewmodel.dart index 34182cea..05679f81 100644 --- a/lib/searchComponent/viewModels/searchableViewModels/grades_search_viewmodel.dart +++ b/lib/searchComponent/viewModels/searchableViewModels/grades_search_viewmodel.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/gradeComponent/model/grade.dart'; -import 'package:campus_flutter/gradeComponent/services/grade_service.dart'; +import 'package:campus_flutter/studiesComponent/model/grade.dart'; +import 'package:campus_flutter/studiesComponent/service/grade_service.dart'; import 'package:campus_flutter/searchComponent/model/search_exception.dart'; import 'package:campus_flutter/searchComponent/protocols/global_search.dart'; import 'package:campus_flutter/searchComponent/protocols/search_viewmodel.dart'; diff --git a/lib/searchComponent/viewModels/searchableViewModels/lecture_search_viewmodel.dart b/lib/searchComponent/viewModels/searchableViewModels/lecture_search_viewmodel.dart index ae567a2d..213aba2f 100644 --- a/lib/searchComponent/viewModels/searchableViewModels/lecture_search_viewmodel.dart +++ b/lib/searchComponent/viewModels/searchableViewModels/lecture_search_viewmodel.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/services/lecture_search_service.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/service/lecture_search_service.dart'; import 'package:campus_flutter/searchComponent/model/search_exception.dart'; import 'package:campus_flutter/searchComponent/protocols/global_search.dart'; import 'package:campus_flutter/searchComponent/protocols/search_viewmodel.dart'; diff --git a/lib/searchComponent/viewModels/searchableViewModels/personal_lecture_seach_viewmodel.dart b/lib/searchComponent/viewModels/searchableViewModels/personal_lecture_seach_viewmodel.dart index 9713f966..c3fcd3bd 100644 --- a/lib/searchComponent/viewModels/searchableViewModels/personal_lecture_seach_viewmodel.dart +++ b/lib/searchComponent/viewModels/searchableViewModels/personal_lecture_seach_viewmodel.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/services/lecture_service.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/service/lecture_service.dart'; import 'package:campus_flutter/searchComponent/model/search_exception.dart'; import 'package:campus_flutter/searchComponent/protocols/global_search.dart'; import 'package:campus_flutter/searchComponent/protocols/search_viewmodel.dart'; diff --git a/lib/searchComponent/views/appWideSearch/resultViews/grade_search_result_view.dart b/lib/searchComponent/views/appWideSearch/resultViews/grade_search_result_view.dart index 5490ea18..d05c89f4 100644 --- a/lib/searchComponent/views/appWideSearch/resultViews/grade_search_result_view.dart +++ b/lib/searchComponent/views/appWideSearch/resultViews/grade_search_result_view.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/gradeComponent/model/grade.dart'; -import 'package:campus_flutter/gradeComponent/views/grade_view.dart'; +import 'package:campus_flutter/studiesComponent/model/grade.dart'; +import 'package:campus_flutter/studiesComponent/view/grade/grade_view.dart'; import 'package:campus_flutter/base/enums/search_category.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/grades_search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/views/appWideSearch/search_result_card_view.dart'; diff --git a/lib/searchComponent/views/appWideSearch/resultViews/lecture_search_result_view.dart b/lib/searchComponent/views/appWideSearch/resultViews/lecture_search_result_view.dart index 7d41613a..65198cb0 100644 --- a/lib/searchComponent/views/appWideSearch/resultViews/lecture_search_result_view.dart +++ b/lib/searchComponent/views/appWideSearch/resultViews/lecture_search_result_view.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_view.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/view/lecture/lecture_view.dart'; import 'package:campus_flutter/base/enums/search_category.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/lecture_search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/views/appWideSearch/search_result_card_view.dart'; diff --git a/lib/searchComponent/views/appWideSearch/resultViews/personal_lecture_search_result_view.dart b/lib/searchComponent/views/appWideSearch/resultViews/personal_lecture_search_result_view.dart index 5047776e..532c4444 100644 --- a/lib/searchComponent/views/appWideSearch/resultViews/personal_lecture_search_result_view.dart +++ b/lib/searchComponent/views/appWideSearch/resultViews/personal_lecture_search_result_view.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_view.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/view/lecture/lecture_view.dart'; import 'package:campus_flutter/base/enums/search_category.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/personal_lecture_seach_viewmodel.dart'; import 'package:campus_flutter/searchComponent/views/appWideSearch/search_result_card_view.dart'; diff --git a/lib/settingsComponent/views/appearance_settings_view.dart b/lib/settingsComponent/views/appearance_settings_view.dart index dfc1f49b..b28f9a7f 100644 --- a/lib/settingsComponent/views/appearance_settings_view.dart +++ b/lib/settingsComponent/views/appearance_settings_view.dart @@ -4,7 +4,7 @@ import 'package:campus_flutter/base/enums/appearance.dart'; import 'package:campus_flutter/base/enums/user_preference.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; import 'package:campus_flutter/calendarComponent/views/calendars_view.dart'; -import 'package:campus_flutter/gradeComponent/viewModels/grade_viewmodel.dart'; +import 'package:campus_flutter/studiesComponent/viewModel/grade_viewmodel.dart'; import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; import 'package:campus_flutter/main.dart'; import 'package:campus_flutter/settingsComponent/viewModels/user_preferences_viewmodel.dart'; diff --git a/lib/gradeComponent/model/average_grade.dart b/lib/studiesComponent/model/average_grade.dart similarity index 100% rename from lib/gradeComponent/model/average_grade.dart rename to lib/studiesComponent/model/average_grade.dart diff --git a/lib/gradeComponent/model/average_grade.g.dart b/lib/studiesComponent/model/average_grade.g.dart similarity index 100% rename from lib/gradeComponent/model/average_grade.g.dart rename to lib/studiesComponent/model/average_grade.g.dart diff --git a/lib/gradeComponent/model/grade.dart b/lib/studiesComponent/model/grade.dart similarity index 100% rename from lib/gradeComponent/model/grade.dart rename to lib/studiesComponent/model/grade.dart diff --git a/lib/gradeComponent/model/grade.g.dart b/lib/studiesComponent/model/grade.g.dart similarity index 100% rename from lib/gradeComponent/model/grade.g.dart rename to lib/studiesComponent/model/grade.g.dart diff --git a/lib/lectureComponent/model/lecture.dart b/lib/studiesComponent/model/lecture.dart similarity index 100% rename from lib/lectureComponent/model/lecture.dart rename to lib/studiesComponent/model/lecture.dart diff --git a/lib/lectureComponent/model/lecture.g.dart b/lib/studiesComponent/model/lecture.g.dart similarity index 100% rename from lib/lectureComponent/model/lecture.g.dart rename to lib/studiesComponent/model/lecture.g.dart diff --git a/lib/lectureComponent/model/lecture_details.dart b/lib/studiesComponent/model/lecture_details.dart similarity index 100% rename from lib/lectureComponent/model/lecture_details.dart rename to lib/studiesComponent/model/lecture_details.dart diff --git a/lib/lectureComponent/model/lecture_details.g.dart b/lib/studiesComponent/model/lecture_details.g.dart similarity index 100% rename from lib/lectureComponent/model/lecture_details.g.dart rename to lib/studiesComponent/model/lecture_details.g.dart diff --git a/lib/studiesComponent/screen/studies_screen.dart b/lib/studiesComponent/screen/studies_screen.dart new file mode 100644 index 00000000..8c9d4b18 --- /dev/null +++ b/lib/studiesComponent/screen/studies_screen.dart @@ -0,0 +1,78 @@ +import 'package:campus_flutter/base/extensions/context.dart'; +import 'package:campus_flutter/studiesComponent/view/grade/grades_view.dart'; +import 'package:campus_flutter/studiesComponent/view/lecture/lectures_view.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; + +class StudiesScreen extends StatefulWidget { + const StudiesScreen({super.key}); + + @override + State createState() => _StudiesScreenState(); +} + +class _StudiesScreenState extends State + with AutomaticKeepAliveClientMixin { + int selectedPage = 0; + PageController pageController = PageController(); + + final List pages = const [ + GradesView(), + LecturesView(), + ]; + + @override + void dispose() { + pageController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + super.build(context); + return Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: context.padding), + child: SizedBox( + width: double.infinity, + child: SegmentedButton( + showSelectedIcon: false, + segments: [ + ButtonSegment(value: 0, label: Text(context.tr("grades"))), + ButtonSegment(value: 1, label: Text(context.tr("lectures"))), + ], + selected: { + selectedPage, + }, + onSelectionChanged: (selection) { + setState(() { + selectedPage = selection.first; + }); + pageController.animateToPage( + selectedPage, + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + ); + }, + ), + ), + ), + Expanded( + child: PageView( + controller: pageController, + onPageChanged: (page) { + setState(() { + selectedPage = page; + }); + }, + children: pages, + ), + ), + ], + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/gradeComponent/services/grade_service.dart b/lib/studiesComponent/service/grade_service.dart similarity index 90% rename from lib/gradeComponent/services/grade_service.dart rename to lib/studiesComponent/service/grade_service.dart index 146a990e..e218437b 100644 --- a/lib/gradeComponent/services/grade_service.dart +++ b/lib/studiesComponent/service/grade_service.dart @@ -2,8 +2,8 @@ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api. import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_exception.dart'; import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_service.dart'; import 'package:campus_flutter/base/networking/base/rest_client.dart'; -import 'package:campus_flutter/gradeComponent/model/average_grade.dart'; -import 'package:campus_flutter/gradeComponent/model/grade.dart'; +import 'package:campus_flutter/studiesComponent/model/average_grade.dart'; +import 'package:campus_flutter/studiesComponent/model/grade.dart'; import 'package:campus_flutter/main.dart'; class GradeService { diff --git a/lib/lectureComponent/services/lecture_details_service.dart b/lib/studiesComponent/service/lecture_details_service.dart similarity index 93% rename from lib/lectureComponent/services/lecture_details_service.dart rename to lib/studiesComponent/service/lecture_details_service.dart index 4be897f0..6d23b2d8 100644 --- a/lib/lectureComponent/services/lecture_details_service.dart +++ b/lib/studiesComponent/service/lecture_details_service.dart @@ -2,8 +2,8 @@ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api. import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_exception.dart'; import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_service.dart'; import 'package:campus_flutter/base/networking/base/rest_client.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture_details.dart'; import 'package:campus_flutter/main.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture_details.dart'; class LectureDetailsService { static Future<(DateTime?, LectureDetails)> fetchLectureDetails( diff --git a/lib/lectureComponent/services/lecture_search_service.dart b/lib/studiesComponent/service/lecture_search_service.dart similarity index 93% rename from lib/lectureComponent/services/lecture_search_service.dart rename to lib/studiesComponent/service/lecture_search_service.dart index 35ec1460..6e56759b 100644 --- a/lib/lectureComponent/services/lecture_search_service.dart +++ b/lib/studiesComponent/service/lecture_search_service.dart @@ -2,7 +2,7 @@ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api. import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_exception.dart'; import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_service.dart'; import 'package:campus_flutter/base/networking/base/rest_client.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; import 'package:campus_flutter/main.dart'; class LectureSearchService { diff --git a/lib/lectureComponent/services/lecture_service.dart b/lib/studiesComponent/service/lecture_service.dart similarity index 93% rename from lib/lectureComponent/services/lecture_service.dart rename to lib/studiesComponent/service/lecture_service.dart index e0ba82dd..fc78a50d 100644 --- a/lib/lectureComponent/services/lecture_service.dart +++ b/lib/studiesComponent/service/lecture_service.dart @@ -2,7 +2,7 @@ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api. import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_exception.dart'; import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_service.dart'; import 'package:campus_flutter/base/networking/base/rest_client.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; import 'package:campus_flutter/main.dart'; class LectureService { diff --git a/lib/gradeComponent/views/chart_view.dart b/lib/studiesComponent/view/grade/chart_view.dart similarity index 97% rename from lib/gradeComponent/views/chart_view.dart rename to lib/studiesComponent/view/grade/chart_view.dart index e14f827e..8aad57ce 100644 --- a/lib/gradeComponent/views/chart_view.dart +++ b/lib/studiesComponent/view/grade/chart_view.dart @@ -2,7 +2,7 @@ import 'dart:math'; import 'package:campus_flutter/base/util/card_with_padding.dart'; import 'package:campus_flutter/base/util/icon_text.dart'; -import 'package:campus_flutter/gradeComponent/viewModels/grade_viewmodel.dart'; +import 'package:campus_flutter/studiesComponent/viewModel/grade_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/gradeComponent/views/grade_rectangle.dart b/lib/studiesComponent/view/grade/grade_rectangle.dart similarity index 93% rename from lib/gradeComponent/views/grade_rectangle.dart rename to lib/studiesComponent/view/grade/grade_rectangle.dart index 26a9de45..52204df4 100644 --- a/lib/gradeComponent/views/grade_rectangle.dart +++ b/lib/studiesComponent/view/grade/grade_rectangle.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/util/string_parser.dart'; -import 'package:campus_flutter/gradeComponent/viewModels/grade_viewmodel.dart'; +import 'package:campus_flutter/studiesComponent/viewModel/grade_viewmodel.dart'; import 'package:flutter/material.dart'; class GradeRectangle extends StatelessWidget { diff --git a/lib/gradeComponent/views/grade_view.dart b/lib/studiesComponent/view/grade/grade_view.dart similarity index 90% rename from lib/gradeComponent/views/grade_view.dart rename to lib/studiesComponent/view/grade/grade_view.dart index c9a18172..a0ea7b5d 100644 --- a/lib/gradeComponent/views/grade_view.dart +++ b/lib/studiesComponent/view/grade/grade_view.dart @@ -2,8 +2,8 @@ import 'dart:core'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/base/util/icon_text.dart'; -import 'package:campus_flutter/gradeComponent/model/grade.dart'; -import 'package:campus_flutter/gradeComponent/views/grade_rectangle.dart'; +import 'package:campus_flutter/studiesComponent/model/grade.dart'; +import 'package:campus_flutter/studiesComponent/view/grade/grade_rectangle.dart'; import 'package:flutter/material.dart'; class GradeRow extends StatelessWidget { diff --git a/lib/gradeComponent/views/grades_view.dart b/lib/studiesComponent/view/grade/grades_view.dart similarity index 77% rename from lib/gradeComponent/views/grades_view.dart rename to lib/studiesComponent/view/grade/grades_view.dart index 73dd354b..d289569b 100644 --- a/lib/gradeComponent/views/grades_view.dart +++ b/lib/studiesComponent/view/grade/grades_view.dart @@ -1,14 +1,11 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/last_updated_text.dart'; -import 'package:campus_flutter/base/util/padded_divider.dart'; -import 'package:campus_flutter/base/util/semester_calculator.dart'; -import 'package:campus_flutter/base/util/string_parser.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; -import 'package:campus_flutter/gradeComponent/model/grade.dart'; -import 'package:campus_flutter/gradeComponent/viewModels/grade_viewmodel.dart'; -import 'package:campus_flutter/gradeComponent/views/chart_view.dart'; -import 'package:campus_flutter/gradeComponent/views/grade_view.dart'; +import 'package:campus_flutter/studiesComponent/model/grade.dart'; +import 'package:campus_flutter/studiesComponent/view/semester_view.dart'; +import 'package:campus_flutter/studiesComponent/viewModel/grade_viewmodel.dart'; +import 'package:campus_flutter/studiesComponent/view/grade/chart_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -159,32 +156,3 @@ class DegreeView extends StatelessWidget { ); } } - -class SemesterView extends StatelessWidget { - const SemesterView({super.key, required this.semester}); - - final MapEntry> semester; - - @override - Widget build(BuildContext context) { - return Card( - child: ExpansionTile( - title: Text(StringParser.toFullSemesterName(context, semester.key)), - initiallyExpanded: - (semester.key == SemesterCalculator.getCurrentSemester() || - semester.key == SemesterCalculator.getPriorSemester()), - children: [ - for (var index = 0; index < semester.value.length; index++) - Column( - children: [ - GradeRow(grade: semester.value[index]), - (index != semester.value.length - 1 - ? const PaddedDivider() - : const SizedBox.shrink()), - ], - ), - ], - ), - ); - } -} diff --git a/lib/lectureComponent/views/lecture_view.dart b/lib/studiesComponent/view/lecture/lecture_view.dart similarity index 96% rename from lib/lectureComponent/views/lecture_view.dart rename to lib/studiesComponent/view/lecture/lecture_view.dart index 23dfcf22..f65cc294 100644 --- a/lib/lectureComponent/views/lecture_view.dart +++ b/lib/studiesComponent/view/lecture/lecture_view.dart @@ -1,7 +1,7 @@ import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/base/util/icon_text.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; diff --git a/lib/lectureComponent/views/lectures_view.dart b/lib/studiesComponent/view/lecture/lectures_view.dart similarity index 93% rename from lib/lectureComponent/views/lectures_view.dart rename to lib/studiesComponent/view/lecture/lectures_view.dart index f7adbdd6..1f679993 100644 --- a/lib/lectureComponent/views/lectures_view.dart +++ b/lib/studiesComponent/view/lecture/lectures_view.dart @@ -2,9 +2,9 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/util/last_updated_text.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/viewModels/lecture_viewmodel.dart'; -import 'package:campus_flutter/lectureComponent/views/semester_view.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/view/semester_view.dart'; +import 'package:campus_flutter/studiesComponent/viewModel/lecture_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/lectureComponent/views/basic_lecture_info_row_view.dart b/lib/studiesComponent/view/lectureDetail/basic_lecture_info_row_view.dart similarity index 100% rename from lib/lectureComponent/views/basic_lecture_info_row_view.dart rename to lib/studiesComponent/view/lectureDetail/basic_lecture_info_row_view.dart diff --git a/lib/lectureComponent/views/basic_lecture_info_view.dart b/lib/studiesComponent/view/lectureDetail/basic_lecture_info_view.dart similarity index 86% rename from lib/lectureComponent/views/basic_lecture_info_view.dart rename to lib/studiesComponent/view/lectureDetail/basic_lecture_info_view.dart index 6b87bff2..59e16f9f 100644 --- a/lib/lectureComponent/views/basic_lecture_info_view.dart +++ b/lib/studiesComponent/view/lectureDetail/basic_lecture_info_view.dart @@ -1,9 +1,9 @@ import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture_details.dart'; -import 'package:campus_flutter/lectureComponent/views/basic_lecture_info_row_view.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_info_card_view.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture_details.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/basic_lecture_info_row_view.dart'; import 'package:campus_flutter/base/extensions/context.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/lecture_info_card_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/lectureComponent/views/detailed_lecture_info_row_view.dart b/lib/studiesComponent/view/lectureDetail/detailed_lecture_info_row_view.dart similarity index 100% rename from lib/lectureComponent/views/detailed_lecture_info_row_view.dart rename to lib/studiesComponent/view/lectureDetail/detailed_lecture_info_row_view.dart diff --git a/lib/lectureComponent/views/detailed_lecture_info_view.dart b/lib/studiesComponent/view/lectureDetail/detailed_lecture_info_view.dart similarity index 80% rename from lib/lectureComponent/views/detailed_lecture_info_view.dart rename to lib/studiesComponent/view/lectureDetail/detailed_lecture_info_view.dart index 48c9a86c..e99d9f35 100644 --- a/lib/lectureComponent/views/detailed_lecture_info_view.dart +++ b/lib/studiesComponent/view/lectureDetail/detailed_lecture_info_view.dart @@ -1,6 +1,6 @@ -import 'package:campus_flutter/lectureComponent/model/lecture_details.dart'; -import 'package:campus_flutter/lectureComponent/views/detailed_lecture_info_row_view.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_info_card_view.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture_details.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/detailed_lecture_info_row_view.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/lecture_info_card_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/lectureComponent/views/lecture_details_view.dart b/lib/studiesComponent/view/lectureDetail/lecture_details_view.dart similarity index 90% rename from lib/lectureComponent/views/lecture_details_view.dart rename to lib/studiesComponent/view/lectureDetail/lecture_details_view.dart index 07dc468e..80bbf369 100644 --- a/lib/lectureComponent/views/lecture_details_view.dart +++ b/lib/studiesComponent/view/lectureDetail/lecture_details_view.dart @@ -6,13 +6,13 @@ import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/calendarComponent/model/calendar_event.dart'; import 'package:campus_flutter/calendarComponent/viewModels/calendar_viewmodel.dart'; import 'package:campus_flutter/base/views/color_picker_view.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture_details.dart'; -import 'package:campus_flutter/lectureComponent/viewModels/lecture_details_viewmodel.dart'; -import 'package:campus_flutter/lectureComponent/views/basic_lecture_info_view.dart'; -import 'package:campus_flutter/lectureComponent/views/detailed_lecture_info_view.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_links_view.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_meeting_info_view.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture_details.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/basic_lecture_info_view.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/detailed_lecture_info_view.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/lecture_links_view.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/lecture_meeting_info_view.dart'; +import 'package:campus_flutter/studiesComponent/viewModel/lecture_details_viewmodel.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/lectureComponent/views/lecture_info_card_view.dart b/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart similarity index 100% rename from lib/lectureComponent/views/lecture_info_card_view.dart rename to lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart diff --git a/lib/lectureComponent/views/lecture_links_view.dart b/lib/studiesComponent/view/lectureDetail/lecture_links_view.dart similarity index 87% rename from lib/lectureComponent/views/lecture_links_view.dart rename to lib/studiesComponent/view/lectureDetail/lecture_links_view.dart index 2b8637d0..acdacea2 100644 --- a/lib/lectureComponent/views/lecture_links_view.dart +++ b/lib/studiesComponent/view/lectureDetail/lecture_links_view.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/util/hyperlink_text.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture_details.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_info_card_view.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture_details.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/lecture_info_card_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/lectureComponent/views/lecture_meeting_info_view.dart b/lib/studiesComponent/view/lectureDetail/lecture_meeting_info_view.dart similarity index 83% rename from lib/lectureComponent/views/lecture_meeting_info_view.dart rename to lib/studiesComponent/view/lectureDetail/lecture_meeting_info_view.dart index ab29153b..77c9bf9c 100644 --- a/lib/lectureComponent/views/lecture_meeting_info_view.dart +++ b/lib/studiesComponent/view/lectureDetail/lecture_meeting_info_view.dart @@ -1,7 +1,7 @@ import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/lectureComponent/viewModels/lecture_details_viewmodel.dart'; -import 'package:campus_flutter/lectureComponent/views/basic_lecture_info_row_view.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_info_card_view.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/lecture_info_card_view.dart'; +import 'package:campus_flutter/studiesComponent/viewModel/lecture_details_viewmodel.dart'; +import 'package:campus_flutter/studiesComponent/view/lectureDetail/basic_lecture_info_row_view.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/lectureComponent/views/semester_view.dart b/lib/studiesComponent/view/semester_view.dart similarity index 52% rename from lib/lectureComponent/views/semester_view.dart rename to lib/studiesComponent/view/semester_view.dart index b7bbbe9d..59c30081 100644 --- a/lib/lectureComponent/views/semester_view.dart +++ b/lib/studiesComponent/view/semester_view.dart @@ -1,29 +1,37 @@ import 'package:campus_flutter/base/util/padded_divider.dart'; import 'package:campus_flutter/base/util/semester_calculator.dart'; import 'package:campus_flutter/base/util/string_parser.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/views/lecture_view.dart'; +import 'package:campus_flutter/studiesComponent/model/grade.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/view/grade/grade_view.dart'; +import 'package:campus_flutter/studiesComponent/view/lecture/lecture_view.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -class SemesterView extends ConsumerWidget { +class SemesterView extends StatelessWidget { const SemesterView({super.key, required this.semester}); - final MapEntry> semester; + final MapEntry> semester; @override - Widget build(BuildContext context, WidgetRef ref) { + Widget build(BuildContext context) { return Card( child: ExpansionTile( title: Text(StringParser.toFullSemesterName(context, semester.key)), initiallyExpanded: - semester.key == SemesterCalculator.getCurrentSemester() || - semester.key == SemesterCalculator.getPriorSemester(), + (semester.key == SemesterCalculator.getCurrentSemester() || + semester.key == SemesterCalculator.getPriorSemester()), children: [ for (var index = 0; index < semester.value.length; index++) Column( children: [ - LectureView(lecture: semester.value[index]), + if (T == Grade) + GradeRow( + grade: semester.value[index] as Grade, + ), + if (T == Lecture) + LectureView( + lecture: semester.value[index] as Lecture, + ), (index != semester.value.length - 1 ? const PaddedDivider() : const SizedBox.shrink()), diff --git a/lib/gradeComponent/viewModels/grade_viewmodel.dart b/lib/studiesComponent/viewModel/grade_viewmodel.dart similarity index 96% rename from lib/gradeComponent/viewModels/grade_viewmodel.dart rename to lib/studiesComponent/viewModel/grade_viewmodel.dart index 473c7c17..d63f5d6c 100644 --- a/lib/gradeComponent/viewModels/grade_viewmodel.dart +++ b/lib/studiesComponent/viewModel/grade_viewmodel.dart @@ -1,8 +1,8 @@ import 'package:campus_flutter/base/util/icon_text.dart'; import 'package:campus_flutter/base/util/string_parser.dart'; -import 'package:campus_flutter/gradeComponent/model/average_grade.dart'; -import 'package:campus_flutter/gradeComponent/model/grade.dart'; -import 'package:campus_flutter/gradeComponent/services/grade_service.dart'; +import 'package:campus_flutter/studiesComponent/model/average_grade.dart'; +import 'package:campus_flutter/studiesComponent/model/grade.dart'; +import 'package:campus_flutter/studiesComponent/service/grade_service.dart'; import 'package:campus_flutter/settingsComponent/views/settings_view.dart'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; diff --git a/lib/lectureComponent/viewModels/lecture_details_viewmodel.dart b/lib/studiesComponent/viewModel/lecture_details_viewmodel.dart similarity index 86% rename from lib/lectureComponent/viewModels/lecture_details_viewmodel.dart rename to lib/studiesComponent/viewModel/lecture_details_viewmodel.dart index 39bc0005..cdebabd3 100644 --- a/lib/lectureComponent/viewModels/lecture_details_viewmodel.dart +++ b/lib/studiesComponent/viewModel/lecture_details_viewmodel.dart @@ -1,7 +1,7 @@ import 'package:campus_flutter/calendarComponent/model/calendar_event.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/model/lecture_details.dart'; -import 'package:campus_flutter/lectureComponent/services/lecture_details_service.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture_details.dart'; +import 'package:campus_flutter/studiesComponent/service/lecture_details_service.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; diff --git a/lib/lectureComponent/viewModels/lecture_viewmodel.dart b/lib/studiesComponent/viewModel/lecture_viewmodel.dart similarity index 89% rename from lib/lectureComponent/viewModels/lecture_viewmodel.dart rename to lib/studiesComponent/viewModel/lecture_viewmodel.dart index d84adec9..26df8888 100644 --- a/lib/lectureComponent/viewModels/lecture_viewmodel.dart +++ b/lib/studiesComponent/viewModel/lecture_viewmodel.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/lectureComponent/model/lecture.dart'; -import 'package:campus_flutter/lectureComponent/services/lecture_service.dart'; +import 'package:campus_flutter/studiesComponent/model/lecture.dart'; +import 'package:campus_flutter/studiesComponent/service/lecture_service.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; From f9b569d374e3e7415ae13b858ed4bf4473fa2c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 5 Sep 2024 23:53:56 +0200 Subject: [PATCH 12/27] Fix Theme Issues --- lib/campusComponent/view/movie/movie_card_view.dart | 2 +- lib/campusComponent/view/news/news_card_view.dart | 2 +- .../view/studentClub/student_club_item_view.dart | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/campusComponent/view/movie/movie_card_view.dart b/lib/campusComponent/view/movie/movie_card_view.dart index 3dd77c61..a3e205dc 100644 --- a/lib/campusComponent/view/movie/movie_card_view.dart +++ b/lib/campusComponent/view/movie/movie_card_view.dart @@ -32,7 +32,7 @@ class MovieCardView extends ConsumerWidget { Widget body(BuildContext context) { return Container( - color: Colors.white, + color: Theme.of(context).cardTheme.color, child: AspectRatio( aspectRatio: 250 / 470, child: Column( diff --git a/lib/campusComponent/view/news/news_card_view.dart b/lib/campusComponent/view/news/news_card_view.dart index cfa5c68f..542e76e7 100644 --- a/lib/campusComponent/view/news/news_card_view.dart +++ b/lib/campusComponent/view/news/news_card_view.dart @@ -39,7 +39,7 @@ class NewsCardView extends ConsumerWidget { Widget body(String imageUrl, BuildContext context) { return Container( - color: Colors.white, + color: Theme.of(context).cardTheme.color, child: AspectRatio( aspectRatio: 1.1, child: Column( diff --git a/lib/campusComponent/view/studentClub/student_club_item_view.dart b/lib/campusComponent/view/studentClub/student_club_item_view.dart index 4dfefabf..99dea085 100644 --- a/lib/campusComponent/view/studentClub/student_club_item_view.dart +++ b/lib/campusComponent/view/studentClub/student_club_item_view.dart @@ -18,18 +18,18 @@ class StudentClubItemView extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { if (isCarousel) { - return body(); + return body(context); } else { return InkWell( onTap: () => UrlLauncher.urlString(studentClub.linkUrl, ref), - child: body(), + child: body(context), ); } } - Widget body() { + Widget body(BuildContext context) { return Container( - color: Colors.white, + color: Theme.of(context).cardTheme.color, child: Column( children: [ if (studentClub.coverUrl.contains("svg")) From 282c666e469207146850c9e48d1a61c1afdf5b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 5 Sep 2024 23:58:57 +0200 Subject: [PATCH 13/27] Restructure Project --- lib/base/enums/campus.dart | 2 +- lib/base/routing/router.dart | 4 ++-- .../views/homeWidget/calendar_widget_view.dart | 2 +- .../view/movie/movies_widget_view.dart | 2 +- lib/campusComponent/view/news/news_widget_view.dart | 2 +- .../view/studentClub/student_club_widget_view.dart | 2 +- lib/feedbackComponent/views/feedback_textfield.dart | 2 +- .../model/departure.dart | 0 .../model/departure.g.dart | 0 .../model/departures_preference.dart | 2 +- .../model/departures_preference.g.dart | 0 .../model/mvv_response.dart | 2 +- .../model/mvv_response.g.dart | 0 .../model/station.dart | 0 .../model/station.g.dart | 0 lib/homeComponent/{ => screen}/home_screen.dart | 4 ++-- .../service}/departures_service.dart | 2 +- .../contactCard}/contact_card_error_view.dart | 0 .../contactCard}/contact_card_loading_view.dart | 0 .../contactCard}/contact_card_unauthorized_view.dart | 0 .../contactCard}/contact_card_view.dart | 2 +- .../views => view/contactCard}/contact_view.dart | 10 +++++----- .../views => view/contactCard}/link_view.dart | 0 .../views => view/contactCard}/tuition_view.dart | 0 .../view/departure}/departures_details_row_view.dart | 2 +- .../view/departure}/departures_details_view.dart | 8 ++++---- .../view/departure}/departures_widget_view.dart | 12 ++++++------ .../views => view/widget}/home_settings_view.dart | 2 +- .../widget}/preference_selection_view.dart | 0 .../views => view/widget}/widget_frame_view.dart | 0 .../views => view/widget}/widget_screen.dart | 4 ++-- .../viewmodel}/departures_viewmodel.dart | 10 +++++----- .../viewModels => viewmodel}/home_viewmodel.dart | 2 +- .../views/navigatum_room_building_view.dart | 2 +- .../views/navigatum_room_details_view.dart | 2 +- .../views/navigatum_room_maps_view.dart | 2 +- lib/navigation_service.dart | 2 +- .../views/person_details_view.dart | 2 +- .../views/cafeterias/cafeterias_view.dart | 2 +- .../views/campuses/campus_most_searched_view.dart | 2 +- lib/placesComponent/views/campuses/campus_view.dart | 2 +- .../views/homeWidget/cafeteria_widget_view.dart | 4 ++-- .../views/homeWidget/study_room_widget_view.dart | 4 ++-- .../views/studyGroups/study_room_group_view.dart | 2 +- .../views/studyGroups/study_rooms_view.dart | 2 +- .../views/appWideSearch/search_result_card_view.dart | 2 +- .../views/appearance_settings_view.dart | 2 +- lib/settingsComponent/views/contact_view.dart | 2 +- .../views/general_settings_view.dart | 2 +- lib/settingsComponent/views/settings_view.dart | 2 +- .../view/lectureDetail/lecture_info_card_view.dart | 2 +- 51 files changed, 59 insertions(+), 59 deletions(-) rename lib/{departuresComponent => homeComponent}/model/departure.dart (100%) rename lib/{departuresComponent => homeComponent}/model/departure.g.dart (100%) rename lib/{departuresComponent => homeComponent}/model/departures_preference.dart (87%) rename lib/{departuresComponent => homeComponent}/model/departures_preference.g.dart (100%) rename lib/{departuresComponent => homeComponent}/model/mvv_response.dart (91%) rename lib/{departuresComponent => homeComponent}/model/mvv_response.g.dart (100%) rename lib/{departuresComponent => homeComponent}/model/station.dart (100%) rename lib/{departuresComponent => homeComponent}/model/station.g.dart (100%) rename lib/homeComponent/{ => screen}/home_screen.dart (87%) rename lib/{departuresComponent/services => homeComponent/service}/departures_service.dart (90%) rename lib/homeComponent/{contactComponent/views => view/contactCard}/contact_card_error_view.dart (100%) rename lib/homeComponent/{contactComponent/views => view/contactCard}/contact_card_loading_view.dart (100%) rename lib/homeComponent/{contactComponent/views => view/contactCard}/contact_card_unauthorized_view.dart (100%) rename lib/homeComponent/{contactComponent/views => view/contactCard}/contact_card_view.dart (96%) rename lib/homeComponent/{contactComponent/views => view/contactCard}/contact_view.dart (80%) rename lib/homeComponent/{contactComponent/views => view/contactCard}/link_view.dart (100%) rename lib/homeComponent/{contactComponent/views => view/contactCard}/tuition_view.dart (100%) rename lib/{departuresComponent/views => homeComponent/view/departure}/departures_details_row_view.dart (97%) rename lib/{departuresComponent/views => homeComponent/view/departure}/departures_details_view.dart (95%) rename lib/{departuresComponent/views/homeWidget => homeComponent/view/departure}/departures_widget_view.dart (90%) rename lib/homeComponent/{widgetComponent/views => view/widget}/home_settings_view.dart (96%) rename lib/homeComponent/{widgetComponent/views => view/widget}/preference_selection_view.dart (100%) rename lib/homeComponent/{widgetComponent/views => view/widget}/widget_frame_view.dart (100%) rename lib/homeComponent/{widgetComponent/views => view/widget}/widget_screen.dart (90%) rename lib/{departuresComponent/viewModel => homeComponent/viewmodel}/departures_viewmodel.dart (95%) rename lib/homeComponent/{widgetComponent/viewModels => viewmodel}/home_viewmodel.dart (97%) diff --git a/lib/base/enums/campus.dart b/lib/base/enums/campus.dart index 705dbea2..c4c63c82 100644 --- a/lib/base/enums/campus.dart +++ b/lib/base/enums/campus.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/classes/location.dart'; -import 'package:campus_flutter/departuresComponent/model/station.dart'; +import 'package:campus_flutter/homeComponent/model/station.dart'; enum Campus { stammgelaende("Stammgelände"), diff --git a/lib/base/routing/router.dart b/lib/base/routing/router.dart index ae7fdbf1..b38f59bf 100644 --- a/lib/base/routing/router.dart +++ b/lib/base/routing/router.dart @@ -7,10 +7,10 @@ import 'package:campus_flutter/calendarComponent/views/calendars_view.dart'; import 'package:campus_flutter/calendarComponent/views/event_creation_view.dart'; import 'package:campus_flutter/campusComponent/screen/campus_screen.dart'; import 'package:campus_flutter/campusComponent/screen/student_clubs_screen.dart'; -import 'package:campus_flutter/departuresComponent/views/departures_details_view.dart'; +import 'package:campus_flutter/homeComponent/view/departure/departures_details_view.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_form_view.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_success_view.dart'; -import 'package:campus_flutter/homeComponent/home_screen.dart'; +import 'package:campus_flutter/homeComponent/screen/home_screen.dart'; import 'package:campus_flutter/navigaTumComponent/model/navigatum_roomfinder_map.dart'; import 'package:campus_flutter/navigaTumComponent/views/navigatum_room_view.dart'; import 'package:campus_flutter/onboardingComponent/views/confirm_view.dart'; diff --git a/lib/calendarComponent/views/homeWidget/calendar_widget_view.dart b/lib/calendarComponent/views/homeWidget/calendar_widget_view.dart index 45646f89..aca55e1e 100644 --- a/lib/calendarComponent/views/homeWidget/calendar_widget_view.dart +++ b/lib/calendarComponent/views/homeWidget/calendar_widget_view.dart @@ -5,7 +5,7 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/calendarComponent/model/calendar_event.dart'; import 'package:campus_flutter/calendarComponent/viewModels/calendar_viewmodel.dart'; import 'package:campus_flutter/calendarComponent/views/homeWidget/calendar_widget_event_view.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/campusComponent/view/movie/movies_widget_view.dart b/lib/campusComponent/view/movie/movies_widget_view.dart index 27f4aad6..f0c0fb42 100644 --- a/lib/campusComponent/view/movie/movies_widget_view.dart +++ b/lib/campusComponent/view/movie/movies_widget_view.dart @@ -3,7 +3,7 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/util/url_launcher.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/campusComponent/viewmodel/movies_viewmodel.dart'; import 'package:campus_flutter/campusComponent/view/movie/movie_card_view.dart'; import 'package:easy_localization/easy_localization.dart'; diff --git a/lib/campusComponent/view/news/news_widget_view.dart b/lib/campusComponent/view/news/news_widget_view.dart index cf318417..eacd5def 100644 --- a/lib/campusComponent/view/news/news_widget_view.dart +++ b/lib/campusComponent/view/news/news_widget_view.dart @@ -3,7 +3,7 @@ import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/campusComponent/view/news/news_card_view.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/campusComponent/viewmodel/news_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/campusComponent/view/studentClub/student_club_widget_view.dart b/lib/campusComponent/view/studentClub/student_club_widget_view.dart index 2accee17..630c25c1 100644 --- a/lib/campusComponent/view/studentClub/student_club_widget_view.dart +++ b/lib/campusComponent/view/studentClub/student_club_widget_view.dart @@ -3,7 +3,7 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/url_launcher.dart'; import 'package:campus_flutter/campusComponent/view/studentClub/student_club_item_view.dart'; import 'package:campus_flutter/campusComponent/viewmodel/student_club_viewmodel.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/campusComponent/viewmodel/movies_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/feedbackComponent/views/feedback_textfield.dart b/lib/feedbackComponent/views/feedback_textfield.dart index 8f69fb79..b1cce727 100644 --- a/lib/feedbackComponent/views/feedback_textfield.dart +++ b/lib/feedbackComponent/views/feedback_textfield.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/util/card_with_padding.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/departuresComponent/model/departure.dart b/lib/homeComponent/model/departure.dart similarity index 100% rename from lib/departuresComponent/model/departure.dart rename to lib/homeComponent/model/departure.dart diff --git a/lib/departuresComponent/model/departure.g.dart b/lib/homeComponent/model/departure.g.dart similarity index 100% rename from lib/departuresComponent/model/departure.g.dart rename to lib/homeComponent/model/departure.g.dart diff --git a/lib/departuresComponent/model/departures_preference.dart b/lib/homeComponent/model/departures_preference.dart similarity index 87% rename from lib/departuresComponent/model/departures_preference.dart rename to lib/homeComponent/model/departures_preference.dart index 09a1982f..aad8d5db 100644 --- a/lib/departuresComponent/model/departures_preference.dart +++ b/lib/homeComponent/model/departures_preference.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/enums/campus.dart'; -import 'package:campus_flutter/departuresComponent/model/station.dart'; +import 'package:campus_flutter/homeComponent/model/station.dart'; import 'package:json_annotation/json_annotation.dart'; part 'departures_preference.g.dart'; diff --git a/lib/departuresComponent/model/departures_preference.g.dart b/lib/homeComponent/model/departures_preference.g.dart similarity index 100% rename from lib/departuresComponent/model/departures_preference.g.dart rename to lib/homeComponent/model/departures_preference.g.dart diff --git a/lib/departuresComponent/model/mvv_response.dart b/lib/homeComponent/model/mvv_response.dart similarity index 91% rename from lib/departuresComponent/model/mvv_response.dart rename to lib/homeComponent/model/mvv_response.dart index c978e839..42879a00 100644 --- a/lib/departuresComponent/model/mvv_response.dart +++ b/lib/homeComponent/model/mvv_response.dart @@ -1,4 +1,4 @@ -import 'package:campus_flutter/departuresComponent/model/departure.dart'; +import 'package:campus_flutter/homeComponent/model/departure.dart'; import 'package:json_annotation/json_annotation.dart'; part 'mvv_response.g.dart'; diff --git a/lib/departuresComponent/model/mvv_response.g.dart b/lib/homeComponent/model/mvv_response.g.dart similarity index 100% rename from lib/departuresComponent/model/mvv_response.g.dart rename to lib/homeComponent/model/mvv_response.g.dart diff --git a/lib/departuresComponent/model/station.dart b/lib/homeComponent/model/station.dart similarity index 100% rename from lib/departuresComponent/model/station.dart rename to lib/homeComponent/model/station.dart diff --git a/lib/departuresComponent/model/station.g.dart b/lib/homeComponent/model/station.g.dart similarity index 100% rename from lib/departuresComponent/model/station.g.dart rename to lib/homeComponent/model/station.g.dart diff --git a/lib/homeComponent/home_screen.dart b/lib/homeComponent/screen/home_screen.dart similarity index 87% rename from lib/homeComponent/home_screen.dart rename to lib/homeComponent/screen/home_screen.dart index 293da98a..ee119686 100644 --- a/lib/homeComponent/home_screen.dart +++ b/lib/homeComponent/screen/home_screen.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/util/padded_divider.dart'; -import 'package:campus_flutter/homeComponent/contactComponent/views/contact_view.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_screen.dart'; +import 'package:campus_flutter/homeComponent/view/contactCard/contact_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/departuresComponent/services/departures_service.dart b/lib/homeComponent/service/departures_service.dart similarity index 90% rename from lib/departuresComponent/services/departures_service.dart rename to lib/homeComponent/service/departures_service.dart index 96ab3dee..5ba4da9a 100644 --- a/lib/departuresComponent/services/departures_service.dart +++ b/lib/homeComponent/service/departures_service.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/networking/apis/mvvDeparturesApi/mvv_departures_api.dart'; import 'package:campus_flutter/base/networking/base/rest_client.dart'; -import 'package:campus_flutter/departuresComponent/model/mvv_response.dart'; +import 'package:campus_flutter/homeComponent/model/mvv_response.dart'; import 'package:campus_flutter/main.dart'; class DeparturesService { diff --git a/lib/homeComponent/contactComponent/views/contact_card_error_view.dart b/lib/homeComponent/view/contactCard/contact_card_error_view.dart similarity index 100% rename from lib/homeComponent/contactComponent/views/contact_card_error_view.dart rename to lib/homeComponent/view/contactCard/contact_card_error_view.dart diff --git a/lib/homeComponent/contactComponent/views/contact_card_loading_view.dart b/lib/homeComponent/view/contactCard/contact_card_loading_view.dart similarity index 100% rename from lib/homeComponent/contactComponent/views/contact_card_loading_view.dart rename to lib/homeComponent/view/contactCard/contact_card_loading_view.dart diff --git a/lib/homeComponent/contactComponent/views/contact_card_unauthorized_view.dart b/lib/homeComponent/view/contactCard/contact_card_unauthorized_view.dart similarity index 100% rename from lib/homeComponent/contactComponent/views/contact_card_unauthorized_view.dart rename to lib/homeComponent/view/contactCard/contact_card_unauthorized_view.dart diff --git a/lib/homeComponent/contactComponent/views/contact_card_view.dart b/lib/homeComponent/view/contactCard/contact_card_view.dart similarity index 96% rename from lib/homeComponent/contactComponent/views/contact_card_view.dart rename to lib/homeComponent/view/contactCard/contact_card_view.dart index bc609465..b702f4e5 100644 --- a/lib/homeComponent/contactComponent/views/contact_card_view.dart +++ b/lib/homeComponent/view/contactCard/contact_card_view.dart @@ -1,7 +1,7 @@ import 'package:auto_size_text/auto_size_text.dart'; import 'package:campus_flutter/base/extensions/base_64_decode_image_data.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; -import 'package:campus_flutter/homeComponent/contactComponent/views/contact_card_loading_view.dart'; +import 'package:campus_flutter/homeComponent/view/contactCard/contact_card_loading_view.dart'; import 'package:campus_flutter/navigation_service.dart'; import 'package:campus_flutter/personDetailedComponent/model/person_details.dart'; import 'package:campus_flutter/personDetailedComponent/viewModel/person_details_viewmodel.dart'; diff --git a/lib/homeComponent/contactComponent/views/contact_view.dart b/lib/homeComponent/view/contactCard/contact_view.dart similarity index 80% rename from lib/homeComponent/contactComponent/views/contact_view.dart rename to lib/homeComponent/view/contactCard/contact_view.dart index 64fda5ea..2f6bc405 100644 --- a/lib/homeComponent/contactComponent/views/contact_view.dart +++ b/lib/homeComponent/view/contactCard/contact_view.dart @@ -1,10 +1,10 @@ import 'package:campus_flutter/base/enums/credentials.dart'; import 'package:campus_flutter/base/util/card_with_padding.dart'; -import 'package:campus_flutter/homeComponent/contactComponent/views/contact_card_error_view.dart'; -import 'package:campus_flutter/homeComponent/contactComponent/views/contact_card_view.dart'; -import 'package:campus_flutter/homeComponent/contactComponent/views/link_view.dart'; -import 'package:campus_flutter/homeComponent/contactComponent/views/tuition_view.dart'; -import 'package:campus_flutter/homeComponent/contactComponent/views/contact_card_unauthorized_view.dart'; +import 'package:campus_flutter/homeComponent/view/contactCard/contact_card_error_view.dart'; +import 'package:campus_flutter/homeComponent/view/contactCard/contact_card_view.dart'; +import 'package:campus_flutter/homeComponent/view/contactCard/link_view.dart'; +import 'package:campus_flutter/homeComponent/view/contactCard/tuition_view.dart'; +import 'package:campus_flutter/homeComponent/view/contactCard/contact_card_unauthorized_view.dart'; import 'package:campus_flutter/onboardingComponent/viewModels/onboarding_viewmodel.dart'; import 'package:campus_flutter/profileComponent/model/profile.dart'; import 'package:campus_flutter/profileComponent/viewModel/profile_viewmodel.dart'; diff --git a/lib/homeComponent/contactComponent/views/link_view.dart b/lib/homeComponent/view/contactCard/link_view.dart similarity index 100% rename from lib/homeComponent/contactComponent/views/link_view.dart rename to lib/homeComponent/view/contactCard/link_view.dart diff --git a/lib/homeComponent/contactComponent/views/tuition_view.dart b/lib/homeComponent/view/contactCard/tuition_view.dart similarity index 100% rename from lib/homeComponent/contactComponent/views/tuition_view.dart rename to lib/homeComponent/view/contactCard/tuition_view.dart diff --git a/lib/departuresComponent/views/departures_details_row_view.dart b/lib/homeComponent/view/departure/departures_details_row_view.dart similarity index 97% rename from lib/departuresComponent/views/departures_details_row_view.dart rename to lib/homeComponent/view/departure/departures_details_row_view.dart index 868c5389..f9c8d6b4 100644 --- a/lib/departuresComponent/views/departures_details_row_view.dart +++ b/lib/homeComponent/view/departure/departures_details_row_view.dart @@ -1,4 +1,4 @@ -import 'package:campus_flutter/departuresComponent/model/departure.dart'; +import 'package:campus_flutter/homeComponent/model/departure.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/departuresComponent/views/departures_details_view.dart b/lib/homeComponent/view/departure/departures_details_view.dart similarity index 95% rename from lib/departuresComponent/views/departures_details_view.dart rename to lib/homeComponent/view/departure/departures_details_view.dart index 6b7816b1..fd59c8ab 100644 --- a/lib/departuresComponent/views/departures_details_view.dart +++ b/lib/homeComponent/view/departure/departures_details_view.dart @@ -6,10 +6,10 @@ import 'package:campus_flutter/base/util/map_launcher.dart'; import 'package:campus_flutter/base/util/icon_text.dart'; import 'package:campus_flutter/base/util/last_updated_text.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; -import 'package:campus_flutter/departuresComponent/model/departure.dart'; -import 'package:campus_flutter/departuresComponent/model/station.dart'; -import 'package:campus_flutter/departuresComponent/viewModel/departures_viewmodel.dart'; -import 'package:campus_flutter/departuresComponent/views/departures_details_row_view.dart'; +import 'package:campus_flutter/homeComponent/model/departure.dart'; +import 'package:campus_flutter/homeComponent/model/station.dart'; +import 'package:campus_flutter/homeComponent/viewmodel/departures_viewmodel.dart'; +import 'package:campus_flutter/homeComponent/view/departure/departures_details_row_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/departuresComponent/views/homeWidget/departures_widget_view.dart b/lib/homeComponent/view/departure/departures_widget_view.dart similarity index 90% rename from lib/departuresComponent/views/homeWidget/departures_widget_view.dart rename to lib/homeComponent/view/departure/departures_widget_view.dart index b7e8c95a..7565e98b 100644 --- a/lib/departuresComponent/views/homeWidget/departures_widget_view.dart +++ b/lib/homeComponent/view/departure/departures_widget_view.dart @@ -4,12 +4,12 @@ import 'package:campus_flutter/base/util/card_with_padding.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/departuresComponent/model/departure.dart'; -import 'package:campus_flutter/departuresComponent/model/station.dart'; -import 'package:campus_flutter/departuresComponent/viewModel/departures_viewmodel.dart'; -import 'package:campus_flutter/departuresComponent/views/departures_details_row_view.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/preference_selection_view.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/model/departure.dart'; +import 'package:campus_flutter/homeComponent/model/station.dart'; +import 'package:campus_flutter/homeComponent/viewmodel/departures_viewmodel.dart'; +import 'package:campus_flutter/homeComponent/view/departure/departures_details_row_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/preference_selection_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/homeComponent/widgetComponent/views/home_settings_view.dart b/lib/homeComponent/view/widget/home_settings_view.dart similarity index 96% rename from lib/homeComponent/widgetComponent/views/home_settings_view.dart rename to lib/homeComponent/view/widget/home_settings_view.dart index eff7c75a..0e29d852 100644 --- a/lib/homeComponent/widgetComponent/views/home_settings_view.dart +++ b/lib/homeComponent/view/widget/home_settings_view.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/enums/home_widget.dart'; import 'package:campus_flutter/base/extensions/context.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/viewModels/home_viewmodel.dart'; +import 'package:campus_flutter/homeComponent/viewmodel/home_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/homeComponent/widgetComponent/views/preference_selection_view.dart b/lib/homeComponent/view/widget/preference_selection_view.dart similarity index 100% rename from lib/homeComponent/widgetComponent/views/preference_selection_view.dart rename to lib/homeComponent/view/widget/preference_selection_view.dart diff --git a/lib/homeComponent/widgetComponent/views/widget_frame_view.dart b/lib/homeComponent/view/widget/widget_frame_view.dart similarity index 100% rename from lib/homeComponent/widgetComponent/views/widget_frame_view.dart rename to lib/homeComponent/view/widget/widget_frame_view.dart diff --git a/lib/homeComponent/widgetComponent/views/widget_screen.dart b/lib/homeComponent/view/widget/widget_screen.dart similarity index 90% rename from lib/homeComponent/widgetComponent/views/widget_screen.dart rename to lib/homeComponent/view/widget/widget_screen.dart index 858d8f57..afc3b1c8 100644 --- a/lib/homeComponent/widgetComponent/views/widget_screen.dart +++ b/lib/homeComponent/view/widget/widget_screen.dart @@ -2,8 +2,8 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/enums/home_widget.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/viewModels/home_viewmodel.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/home_settings_view.dart'; +import 'package:campus_flutter/homeComponent/viewmodel/home_viewmodel.dart'; +import 'package:campus_flutter/homeComponent/view/widget/home_settings_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/departuresComponent/viewModel/departures_viewmodel.dart b/lib/homeComponent/viewmodel/departures_viewmodel.dart similarity index 95% rename from lib/departuresComponent/viewModel/departures_viewmodel.dart rename to lib/homeComponent/viewmodel/departures_viewmodel.dart index be6c833a..9195efa9 100644 --- a/lib/departuresComponent/viewModel/departures_viewmodel.dart +++ b/lib/homeComponent/viewmodel/departures_viewmodel.dart @@ -5,11 +5,11 @@ import 'package:campus_flutter/base/enums/campus.dart'; import 'package:campus_flutter/base/enums/user_preference.dart'; import 'package:campus_flutter/base/util/icon_text.dart'; import 'package:campus_flutter/base/services/location_service.dart'; -import 'package:campus_flutter/departuresComponent/model/departure.dart'; -import 'package:campus_flutter/departuresComponent/model/departures_preference.dart'; -import 'package:campus_flutter/departuresComponent/model/mvv_response.dart'; -import 'package:campus_flutter/departuresComponent/model/station.dart'; -import 'package:campus_flutter/departuresComponent/services/departures_service.dart'; +import 'package:campus_flutter/homeComponent/model/departure.dart'; +import 'package:campus_flutter/homeComponent/model/departures_preference.dart'; +import 'package:campus_flutter/homeComponent/model/mvv_response.dart'; +import 'package:campus_flutter/homeComponent/model/station.dart'; +import 'package:campus_flutter/homeComponent/service/departures_service.dart'; import 'package:campus_flutter/main.dart'; import 'package:campus_flutter/settingsComponent/service/user_preferences_service.dart'; import 'package:easy_localization/easy_localization.dart'; diff --git a/lib/homeComponent/widgetComponent/viewModels/home_viewmodel.dart b/lib/homeComponent/viewmodel/home_viewmodel.dart similarity index 97% rename from lib/homeComponent/widgetComponent/viewModels/home_viewmodel.dart rename to lib/homeComponent/viewmodel/home_viewmodel.dart index ea227a47..e916c419 100644 --- a/lib/homeComponent/widgetComponent/viewModels/home_viewmodel.dart +++ b/lib/homeComponent/viewmodel/home_viewmodel.dart @@ -2,7 +2,7 @@ import 'package:campus_flutter/base/enums/home_widget.dart'; import 'package:campus_flutter/base/enums/user_preference.dart'; import 'package:campus_flutter/base/enums/widget_type.dart'; import 'package:campus_flutter/calendarComponent/views/homeWidget/calendar_widget_view.dart'; -import 'package:campus_flutter/departuresComponent/views/homeWidget/departures_widget_view.dart'; +import 'package:campus_flutter/homeComponent/view/departure/departures_widget_view.dart'; import 'package:campus_flutter/main.dart'; import 'package:campus_flutter/placesComponent/views/homeWidget/cafeteria_widget_view.dart'; import 'package:campus_flutter/placesComponent/views/homeWidget/study_room_widget_view.dart'; diff --git a/lib/navigaTumComponent/views/navigatum_room_building_view.dart b/lib/navigaTumComponent/views/navigatum_room_building_view.dart index 5e4f103b..3e713d74 100644 --- a/lib/navigaTumComponent/views/navigatum_room_building_view.dart +++ b/lib/navigaTumComponent/views/navigatum_room_building_view.dart @@ -1,4 +1,4 @@ -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/navigaTumComponent/model/details/navigatum_navigation_coordinates.dart'; import 'package:campus_flutter/placesComponent/views/map_widget.dart'; import 'package:easy_localization/easy_localization.dart'; diff --git a/lib/navigaTumComponent/views/navigatum_room_details_view.dart b/lib/navigaTumComponent/views/navigatum_room_details_view.dart index 4ab0b95b..4d75ca01 100644 --- a/lib/navigaTumComponent/views/navigatum_room_details_view.dart +++ b/lib/navigaTumComponent/views/navigatum_room_details_view.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/navigaTumComponent/model/navigatum_navigation_property.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/navigaTumComponent/viewModels/navigatum_details_viewmodel.dart'; diff --git a/lib/navigaTumComponent/views/navigatum_room_maps_view.dart b/lib/navigaTumComponent/views/navigatum_room_maps_view.dart index 1ed1ebc1..75f3bdf9 100644 --- a/lib/navigaTumComponent/views/navigatum_room_maps_view.dart +++ b/lib/navigaTumComponent/views/navigatum_room_maps_view.dart @@ -4,7 +4,7 @@ import 'package:campus_flutter/base/util/horizontal_slider.dart'; import 'package:campus_flutter/base/networking/apis/navigaTumApi/navigatum_api.dart'; import 'package:campus_flutter/base/networking/apis/navigaTumApi/navigatum_api_service.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/navigaTumComponent/model/navigatum_roomfinder_map.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/navigation_service.dart b/lib/navigation_service.dart index c3d69586..ebd21369 100644 --- a/lib/navigation_service.dart +++ b/lib/navigation_service.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:campus_flutter/base/enums/credentials.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_screen.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_screen.dart'; import 'package:campus_flutter/main.dart'; import 'package:campus_flutter/onboardingComponent/viewModels/onboarding_viewmodel.dart'; import 'package:campus_flutter/searchComponent/viewModels/global_search_viewmodel.dart'; diff --git a/lib/personDetailedComponent/views/person_details_view.dart b/lib/personDetailedComponent/views/person_details_view.dart index 5e0ba6db..bd822989 100644 --- a/lib/personDetailedComponent/views/person_details_view.dart +++ b/lib/personDetailedComponent/views/person_details_view.dart @@ -6,7 +6,7 @@ import 'package:campus_flutter/base/util/url_launcher.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/personDetailedComponent/model/person_details.dart'; import 'package:campus_flutter/personDetailedComponent/viewModel/person_details_viewmodel.dart'; import 'package:campus_flutter/base/extensions/context.dart'; diff --git a/lib/placesComponent/views/cafeterias/cafeterias_view.dart b/lib/placesComponent/views/cafeterias/cafeterias_view.dart index b3c07814..413d1e70 100644 --- a/lib/placesComponent/views/cafeterias/cafeterias_view.dart +++ b/lib/placesComponent/views/cafeterias/cafeterias_view.dart @@ -4,7 +4,7 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/placesComponent/model/cafeterias/cafeteria.dart'; import 'package:campus_flutter/placesComponent/viewModels/cafeterias_viewmodel.dart'; import 'package:campus_flutter/placesComponent/views/cafeterias/cafeteria_row_view.dart'; diff --git a/lib/placesComponent/views/campuses/campus_most_searched_view.dart b/lib/placesComponent/views/campuses/campus_most_searched_view.dart index d1bd5ee7..a2049ce1 100644 --- a/lib/placesComponent/views/campuses/campus_most_searched_view.dart +++ b/lib/placesComponent/views/campuses/campus_most_searched_view.dart @@ -2,7 +2,7 @@ import 'package:campus_flutter/base/enums/campus.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/navigaTumComponent/viewModels/navigatum_campus_viewmodel.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:easy_localization/easy_localization.dart'; diff --git a/lib/placesComponent/views/campuses/campus_view.dart b/lib/placesComponent/views/campuses/campus_view.dart index f121b381..67cfcec3 100644 --- a/lib/placesComponent/views/campuses/campus_view.dart +++ b/lib/placesComponent/views/campuses/campus_view.dart @@ -1,7 +1,7 @@ import 'package:campus_flutter/base/enums/campus.dart'; import 'package:campus_flutter/base/util/icon_text.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/navigaTumComponent/viewModels/navigatum_campus_viewmodel.dart'; import 'package:campus_flutter/placesComponent/model/cafeterias/cafeteria.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room_group.dart'; diff --git a/lib/placesComponent/views/homeWidget/cafeteria_widget_view.dart b/lib/placesComponent/views/homeWidget/cafeteria_widget_view.dart index 26bbb8a8..fd978e20 100644 --- a/lib/placesComponent/views/homeWidget/cafeteria_widget_view.dart +++ b/lib/placesComponent/views/homeWidget/cafeteria_widget_view.dart @@ -3,8 +3,8 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/util/places_util.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/preference_selection_view.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/preference_selection_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/placesComponent/model/cafeterias/cafeteria.dart'; import 'package:campus_flutter/placesComponent/model/cafeterias/cafeteria_menu.dart'; import 'package:campus_flutter/placesComponent/viewModels/cafeterias_viewmodel.dart'; diff --git a/lib/placesComponent/views/homeWidget/study_room_widget_view.dart b/lib/placesComponent/views/homeWidget/study_room_widget_view.dart index 415fde7e..ff27bad9 100644 --- a/lib/placesComponent/views/homeWidget/study_room_widget_view.dart +++ b/lib/placesComponent/views/homeWidget/study_room_widget_view.dart @@ -2,8 +2,8 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/preference_selection_view.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/preference_selection_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room_group.dart'; import 'package:campus_flutter/placesComponent/viewModels/study_rooms_viewmodel.dart'; import 'package:campus_flutter/base/extensions/context.dart'; diff --git a/lib/placesComponent/views/studyGroups/study_room_group_view.dart b/lib/placesComponent/views/studyGroups/study_room_group_view.dart index f2704319..e4fd210e 100644 --- a/lib/placesComponent/views/studyGroups/study_room_group_view.dart +++ b/lib/placesComponent/views/studyGroups/study_room_group_view.dart @@ -3,7 +3,7 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/last_updated_text.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room_group.dart'; import 'package:campus_flutter/placesComponent/viewModels/study_rooms_viewmodel.dart'; diff --git a/lib/placesComponent/views/studyGroups/study_rooms_view.dart b/lib/placesComponent/views/studyGroups/study_rooms_view.dart index 0091e925..ee520360 100644 --- a/lib/placesComponent/views/studyGroups/study_rooms_view.dart +++ b/lib/placesComponent/views/studyGroups/study_rooms_view.dart @@ -4,7 +4,7 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room_group.dart'; import 'package:campus_flutter/placesComponent/viewModels/study_rooms_viewmodel.dart'; import 'package:campus_flutter/placesComponent/views/homeWidget/study_room_widget_view.dart'; diff --git a/lib/searchComponent/views/appWideSearch/search_result_card_view.dart b/lib/searchComponent/views/appWideSearch/search_result_card_view.dart index 57cdd872..a5783ec8 100644 --- a/lib/searchComponent/views/appWideSearch/search_result_card_view.dart +++ b/lib/searchComponent/views/appWideSearch/search_result_card_view.dart @@ -4,7 +4,7 @@ import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/searchComponent/protocols/search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/protocols/searchable.dart'; import 'package:campus_flutter/searchComponent/viewModels/global_search_viewmodel.dart'; diff --git a/lib/settingsComponent/views/appearance_settings_view.dart b/lib/settingsComponent/views/appearance_settings_view.dart index b28f9a7f..8ce1f249 100644 --- a/lib/settingsComponent/views/appearance_settings_view.dart +++ b/lib/settingsComponent/views/appearance_settings_view.dart @@ -5,7 +5,7 @@ import 'package:campus_flutter/base/enums/user_preference.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; import 'package:campus_flutter/calendarComponent/views/calendars_view.dart'; import 'package:campus_flutter/studiesComponent/viewModel/grade_viewmodel.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/main.dart'; import 'package:campus_flutter/settingsComponent/viewModels/user_preferences_viewmodel.dart'; import 'package:campus_flutter/settingsComponent/views/settings_view.dart'; diff --git a/lib/settingsComponent/views/contact_view.dart b/lib/settingsComponent/views/contact_view.dart index 2b12bed1..078ad294 100644 --- a/lib/settingsComponent/views/contact_view.dart +++ b/lib/settingsComponent/views/contact_view.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:campus_flutter/base/util/hyperlink_text.dart'; import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/settingsComponent/views/general_settings_view.dart b/lib/settingsComponent/views/general_settings_view.dart index 2cd7f2e0..7de2657b 100644 --- a/lib/settingsComponent/views/general_settings_view.dart +++ b/lib/settingsComponent/views/general_settings_view.dart @@ -2,7 +2,7 @@ import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/base/extensions/locale_fullname.dart'; import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/settingsComponent/views/settings_view.dart b/lib/settingsComponent/views/settings_view.dart index 8c91bff8..b70813b5 100644 --- a/lib/settingsComponent/views/settings_view.dart +++ b/lib/settingsComponent/views/settings_view.dart @@ -1,7 +1,7 @@ import 'package:campus_flutter/base/enums/credentials.dart'; import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/onboardingComponent/viewModels/onboarding_viewmodel.dart'; import 'package:campus_flutter/settingsComponent/views/appearance_settings_view.dart'; import 'package:campus_flutter/settingsComponent/views/contact_view.dart'; diff --git a/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart b/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart index 3d3ff400..88acbb96 100644 --- a/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart +++ b/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/util/icon_text.dart'; import 'package:campus_flutter/base/views/seperated_list.dart'; -import 'package:campus_flutter/homeComponent/widgetComponent/views/widget_frame_view.dart'; +import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:flutter/material.dart'; class LectureInfoCardView extends StatelessWidget { From c4d1a658eab89081cb6881ba0baa04cca6995a3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Fri, 6 Sep 2024 00:04:13 +0200 Subject: [PATCH 14/27] Fix Routing within Places Tab --- lib/base/routing/router.dart | 2 +- lib/placesComponent/views/campuses/campus_card_view.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/base/routing/router.dart b/lib/base/routing/router.dart index b38f59bf..50e4e9d7 100644 --- a/lib/base/routing/router.dart +++ b/lib/base/routing/router.dart @@ -177,7 +177,7 @@ final _router = GoRouter( builder: (context, state) => const CafeteriasScaffold(), ), GoRoute( - path: campus, + path: place, builder: (context, state) => CampusScaffold( campus: state.extra as Campus, ), diff --git a/lib/placesComponent/views/campuses/campus_card_view.dart b/lib/placesComponent/views/campuses/campus_card_view.dart index bda74567..cbf59285 100644 --- a/lib/placesComponent/views/campuses/campus_card_view.dart +++ b/lib/placesComponent/views/campuses/campus_card_view.dart @@ -60,7 +60,7 @@ class CampusCardView extends ConsumerWidget { ), ), ), - onTap: () => context.push(routes.campus, extra: campus), + onTap: () => context.push(routes.place, extra: campus), ); } } From a79d3e3759bda2c502fae1adf3f1b586a9768c32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Fri, 6 Sep 2024 00:07:48 +0200 Subject: [PATCH 15/27] Fix Error Handling for Most Searched Rooms --- .../views/campuses/campus_most_searched_view.dart | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/placesComponent/views/campuses/campus_most_searched_view.dart b/lib/placesComponent/views/campuses/campus_most_searched_view.dart index a2049ce1..6ab12d54 100644 --- a/lib/placesComponent/views/campuses/campus_most_searched_view.dart +++ b/lib/placesComponent/views/campuses/campus_most_searched_view.dart @@ -1,4 +1,6 @@ import 'package:campus_flutter/base/enums/campus.dart'; +import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; +import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; import 'package:campus_flutter/base/routing/routes.dart'; @@ -62,7 +64,12 @@ class CampusMostSearchedView extends ConsumerWidget { ); } } else if (snapshot.hasError) { - return const Text("Error"); + return ListTile( + title: ErrorHandlingRouter( + error: snapshot.error!, + errorHandlingViewType: ErrorHandlingViewType.descriptionOnly, + ), + ); } else { return Padding( padding: EdgeInsets.all(context.padding), From 3e06da279029b0e74482b29425a482af70d7909a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Fri, 6 Sep 2024 00:46:16 +0200 Subject: [PATCH 16/27] Fix Home Preferences Decoding --- lib/base/enums/home_widget.dart | 13 +++++++++---- lib/homeComponent/viewmodel/home_viewmodel.dart | 5 ++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/base/enums/home_widget.dart b/lib/base/enums/home_widget.dart index 5981d383..9e227e2e 100644 --- a/lib/base/enums/home_widget.dart +++ b/lib/base/enums/home_widget.dart @@ -13,10 +13,15 @@ class HomeScreenWidget { return "${WidgetType.values.indexOf(widgetType)};${enabled.toString()}"; } - factory HomeScreenWidget.fromString(String data) { + static HomeScreenWidget? fromString(String data) { final dataPoints = data.split(";"); - final widgetType = WidgetType.values[int.parse(dataPoints[0])]; - final enabled = dataPoints[1] == "true" ? true : false; - return HomeScreenWidget(widgetType: widgetType, enabled: enabled); + final index = int.parse(dataPoints[0]); + if (index < WidgetType.values.length) { + final widgetType = WidgetType.values[int.parse(dataPoints[0])]; + final enabled = dataPoints[1] == "true" ? true : false; + return HomeScreenWidget(widgetType: widgetType, enabled: enabled); + } else { + return null; + } } } diff --git a/lib/homeComponent/viewmodel/home_viewmodel.dart b/lib/homeComponent/viewmodel/home_viewmodel.dart index e916c419..95454fc1 100644 --- a/lib/homeComponent/viewmodel/home_viewmodel.dart +++ b/lib/homeComponent/viewmodel/home_viewmodel.dart @@ -24,7 +24,10 @@ class HomeViewModel { .load(UserPreference.homeWidgets) as List? ?? []; List widgets = defaultWidgets; - final types = data.map((e) => HomeScreenWidget.fromString(e)).toList(); + final types = data + .map((e) => HomeScreenWidget.fromString(e)) + .whereType() + .toList(); if (types.isNotEmpty) { widgets = types; } From 4a7d32c99c7d6696c15cc94c3216891df69029fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Fri, 6 Sep 2024 00:46:59 +0200 Subject: [PATCH 17/27] Remove Commented Code --- lib/base/enums/widget_type.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/base/enums/widget_type.dart b/lib/base/enums/widget_type.dart index fc1b0dd1..4898352b 100644 --- a/lib/base/enums/widget_type.dart +++ b/lib/base/enums/widget_type.dart @@ -3,6 +3,4 @@ enum WidgetType { calendar, departures, studyRooms; - //movies, - //news; } From bdbf0560c81056f0e6d42c9a4b08352dbd920d79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Fri, 6 Sep 2024 09:32:47 +0200 Subject: [PATCH 18/27] Adapt Search to Tab Changes and Student Club Addition --- lib/base/enums/search_category.dart | 6 +- .../viewModels/global_search_viewmodel.dart | 28 +++++--- .../student_club_search_viewmodel.dart | 58 +++++++++++++++++ .../student_club_search_result_view.dart | 65 +++++++++++++++++++ .../search_result_card_view.dart | 23 ++++--- .../search_result_details_view.dart | 5 +- .../search_result_view_builder.dart | 3 + pubspec.lock | 4 +- 8 files changed, 171 insertions(+), 21 deletions(-) create mode 100644 lib/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart create mode 100644 lib/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart diff --git a/lib/base/enums/search_category.dart b/lib/base/enums/search_category.dart index f99bd199..5a8d5d12 100644 --- a/lib/base/enums/search_category.dart +++ b/lib/base/enums/search_category.dart @@ -11,7 +11,8 @@ enum SearchCategory { personalLectures, grade, movie, - news; + news, + studentClub; } extension SearchCategoryExtension on SearchCategory { @@ -44,6 +45,8 @@ extension SearchCategoryExtension on SearchCategory { return context.tr("persons"); case SearchCategory.rooms: return context.tr("rooms"); + case SearchCategory.studentClub: + return "Student Clubs"; default: return context.tr("unknown"); } @@ -56,6 +59,7 @@ extension SearchCategoryExtension on SearchCategory { SearchCategory.cafeterias, SearchCategory.movie, SearchCategory.news, + SearchCategory.studentClub, ]; } } diff --git a/lib/searchComponent/viewModels/global_search_viewmodel.dart b/lib/searchComponent/viewModels/global_search_viewmodel.dart index 973580e5..8b49c0d3 100644 --- a/lib/searchComponent/viewModels/global_search_viewmodel.dart +++ b/lib/searchComponent/viewModels/global_search_viewmodel.dart @@ -10,6 +10,7 @@ import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/l import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/movie_search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/news_search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/personal_lecture_seach_viewmodel.dart'; +import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/study_room_search_viewmodel.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; @@ -96,18 +97,15 @@ class GlobalSearchViewModel { switch (index) { case 1: if (isAuthorized) { - selectedCategories.add([SearchCategory.grade]); + selectedCategories.add([ + SearchCategory.grade, + SearchCategory.personalLectures, + SearchCategory.lectures, + ]); } else { selectedCategories.add([]); } case 2: - if (isAuthorized) { - selectedCategories - .add([SearchCategory.personalLectures, SearchCategory.lectures]); - } else { - selectedCategories.add([]); - } - case 3: if (isAuthorized) { selectedCategories.add([ SearchCategory.calendar, @@ -115,6 +113,12 @@ class GlobalSearchViewModel { } else { selectedCategories.add([]); } + case 3: + selectedCategories.add([ + SearchCategory.news, + SearchCategory.movie, + SearchCategory.studentClub, + ]); case 4: selectedCategories.add([ SearchCategory.studyRoom, @@ -145,6 +149,10 @@ class GlobalSearchViewModel { ref.read(movieSearchViewModel).movieSearch(query: this.searchString); case SearchCategory.news: ref.read(newsSearchViewModel).newsSearch(query: this.searchString); + case SearchCategory.studentClub: + ref + .read(studentClubSearchViewModel) + .studentClubSearch(query: this.searchString); case SearchCategory.studyRoom: ref .read(studyRoomSearchViewModel) @@ -181,6 +189,10 @@ class GlobalSearchViewModel { ref.read(movieSearchViewModel).movieSearch(query: this.searchString); case SearchCategory.news: ref.read(newsSearchViewModel).newsSearch(query: this.searchString); + case SearchCategory.studentClub: + ref + .read(studentClubSearchViewModel) + .studentClubSearch(query: this.searchString); case SearchCategory.studyRoom: ref .read(studyRoomSearchViewModel) diff --git a/lib/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart b/lib/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart new file mode 100644 index 00000000..a6612537 --- /dev/null +++ b/lib/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart @@ -0,0 +1,58 @@ +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; +import 'package:campus_flutter/campusComponent/service/student_club_service.dart'; +import 'package:campus_flutter/searchComponent/model/comparison_token.dart'; +import 'package:campus_flutter/searchComponent/model/search_exception.dart'; +import 'package:campus_flutter/searchComponent/protocols/global_search.dart'; +import 'package:campus_flutter/searchComponent/protocols/search_viewmodel.dart'; +import 'package:campus_flutter/searchComponent/protocols/searchable.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:rxdart/rxdart.dart'; + +final studentClubSearchViewModel = + Provider((ref) => StudentClubSearchViewModel()); + +class StudentClubSearchViewModel implements SearchViewModel { + @override + BehaviorSubject?> searchResults = + BehaviorSubject.seeded(null); + + List studentClubData = []; + + Future studentClubSearch( + {bool forcedRefresh = false, required String query}) async { + if (studentClubData.isEmpty) { + return StudentClubService.fetchStudentClubs(forcedRefresh).then( + (value) { + studentClubData = value.$2 + .expand((e) => e.clubs) + .map((e) => StudentClubSearch(e)) + .toList(); + _search(query); + }, + onError: (error) => searchResults.addError(error), + ); + } else { + _search(query); + } + } + + void _search(String query) { + final results = GlobalSearch.tokenSearch(query, studentClubData); + if (results == null) { + searchResults.addError(SearchException.empty(searchQuery: query)); + } else { + searchResults.add(results); + } + } +} + +class StudentClubSearch extends Searchable { + final StudentClub studentClub; + + StudentClubSearch(this.studentClub); + + @override + List get comparisonTokens => [ + ComparisonToken(value: studentClub.name), + ]; +} diff --git a/lib/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart b/lib/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart new file mode 100644 index 00000000..b55337f1 --- /dev/null +++ b/lib/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart @@ -0,0 +1,65 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:campus_flutter/base/enums/search_category.dart'; +import 'package:campus_flutter/base/util/url_launcher.dart'; +import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart'; +import 'package:campus_flutter/searchComponent/views/appWideSearch/search_result_card_view.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class StudentClubSearchResultView extends ConsumerWidget { + const StudentClubSearchResultView({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return SearchResultCardView( + searchCategory: SearchCategory.studentClub, + viewModel: studentClubSearchViewModel, + body: (studentClubSearch) { + return ListTile( + leading: image(studentClubSearch.studentClub.coverUrl), + title: Text(studentClubSearch.studentClub.name), + onTap: () { + if (studentClubSearch.studentClub.linkUrl.isNotEmpty) { + UrlLauncher.urlString( + studentClubSearch.studentClub.linkUrl, + ref, + ); + } + }, + ); + }, + ); + } + + Widget image(String imageUrl) { + return ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(10)), + child: () { + if (imageUrl.contains("svg")) { + return SvgPicture.network( + width: 80, + height: 50, + imageUrl, + fit: BoxFit.cover, + placeholderBuilder: (context) => Image.asset( + "assets/images/placeholders/student_club_placeholder.png", + fit: BoxFit.cover, + ), + ); + } else { + return CachedNetworkImage( + width: 80, + height: 50, + imageUrl: imageUrl, + errorWidget: (context, url, error) => Image.asset( + "assets/images/placeholders/student_club_placeholder.png", + fit: BoxFit.cover, + ), + fit: BoxFit.cover, + ); + } + }(), + ); + } +} diff --git a/lib/searchComponent/views/appWideSearch/search_result_card_view.dart b/lib/searchComponent/views/appWideSearch/search_result_card_view.dart index a5783ec8..f8f06f4a 100644 --- a/lib/searchComponent/views/appWideSearch/search_result_card_view.dart +++ b/lib/searchComponent/views/appWideSearch/search_result_card_view.dart @@ -59,17 +59,22 @@ class SearchResultCardView, S extends Searchable> physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, itemBuilder: (context, index) { - if (index == itemCount - 1) { - return _showMoreButton( - snapshot.data!, - context, - ); - } else { - return body(snapshot.data![index]); - } + return Padding( + padding: const EdgeInsets.symmetric(vertical: 5), + child: () { + if (index == itemCount - 1) { + return _showMoreButton( + snapshot.data!, + context, + ); + } else { + return body(snapshot.data![index]); + } + }(), + ); }, separatorBuilder: (context, index) => const PaddedDivider( - height: 0, + height: 5, ), itemCount: itemCount, ); diff --git a/lib/searchComponent/views/appWideSearch/search_result_details_view.dart b/lib/searchComponent/views/appWideSearch/search_result_details_view.dart index 903f239b..642955fe 100644 --- a/lib/searchComponent/views/appWideSearch/search_result_details_view.dart +++ b/lib/searchComponent/views/appWideSearch/search_result_details_view.dart @@ -56,7 +56,10 @@ class SearchResultDetailsView extends StatelessWidget { padding: EdgeInsets.zero, shrinkWrap: true, itemCount: data.length, - itemBuilder: (context, index) => body(data[index]), + itemBuilder: (context, index) => Padding( + padding: const EdgeInsets.symmetric(vertical: 5), + child: body(data[index]), + ), separatorBuilder: (BuildContext context, int index) => const PaddedDivider(height: 0), ), diff --git a/lib/searchComponent/views/appWideSearch/search_result_view_builder.dart b/lib/searchComponent/views/appWideSearch/search_result_view_builder.dart index 7b617dd0..b7f32f17 100644 --- a/lib/searchComponent/views/appWideSearch/search_result_view_builder.dart +++ b/lib/searchComponent/views/appWideSearch/search_result_view_builder.dart @@ -8,6 +8,7 @@ import 'package:campus_flutter/searchComponent/views/appWideSearch/resultViews/n import 'package:campus_flutter/searchComponent/views/appWideSearch/resultViews/news_search_result_view.dart'; import 'package:campus_flutter/searchComponent/views/appWideSearch/resultViews/person_search_result_view.dart'; import 'package:campus_flutter/searchComponent/views/appWideSearch/resultViews/personal_lecture_search_result_view.dart'; +import 'package:campus_flutter/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart'; import 'package:campus_flutter/searchComponent/views/appWideSearch/resultViews/study_room_search_result_view.dart'; import 'package:flutter/material.dart'; @@ -29,6 +30,8 @@ class SearchResultViewBuilder extends StatelessWidget { return const MovieSearchResultView(); case SearchCategory.news: return const NewsSearchResultView(); + case SearchCategory.studentClub: + return const StudentClubSearchResultView(); case SearchCategory.studyRoom: return const StudyRoomSearchResultView(); case SearchCategory.lectures: diff --git a/pubspec.lock b/pubspec.lock index 61b11646..20dbd1f6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -745,10 +745,10 @@ packages: description: path: "." ref: master - resolved-ref: e7ed6599b195276d9c395d04187e04b3cca9493d + resolved-ref: c63c97840167512f6a5fa0877d25503cd539f138 url: "https://github.com/jakobkoerber/grpc-dart.git" source: git - version: "4.0.1" + version: "4.0.2" home_widget: dependency: "direct main" description: From 336abcc478f1a95bc7956e81bb854ee03cb56e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Fri, 6 Sep 2024 20:30:14 +0200 Subject: [PATCH 19/27] Make Suggested Changes --- .../view/studentClub/student_club_widget_view.dart | 1 - .../views/appWideSearch/search_result_card_view.dart | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/campusComponent/view/studentClub/student_club_widget_view.dart b/lib/campusComponent/view/studentClub/student_club_widget_view.dart index 630c25c1..0d96ade2 100644 --- a/lib/campusComponent/view/studentClub/student_club_widget_view.dart +++ b/lib/campusComponent/view/studentClub/student_club_widget_view.dart @@ -49,7 +49,6 @@ class _StudentClubWidgetViewState extends ConsumerState { ), ], ), - //title: "Suggested Student Clubs", child: SizedBox( height: 200, child: StreamBuilder( diff --git a/lib/searchComponent/views/appWideSearch/search_result_card_view.dart b/lib/searchComponent/views/appWideSearch/search_result_card_view.dart index f8f06f4a..81395493 100644 --- a/lib/searchComponent/views/appWideSearch/search_result_card_view.dart +++ b/lib/searchComponent/views/appWideSearch/search_result_card_view.dart @@ -74,7 +74,7 @@ class SearchResultCardView, S extends Searchable> ); }, separatorBuilder: (context, index) => const PaddedDivider( - height: 5, + height: 0, ), itemCount: itemCount, ); From 21689cd8bf3cba96db4566b9b628bc8905245ad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Fri, 6 Sep 2024 20:51:21 +0200 Subject: [PATCH 20/27] Optimize UI Changes for Tablet --- lib/campusComponent/screen/campus_screen.dart | 19 +++++++++++++++++++ .../screen/student_clubs_screen.dart | 10 +++++++++- .../view/news/news_widget_view.dart | 17 +++++++++++++---- .../student_club_search_viewmodel.dart | 6 ++++-- 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/lib/campusComponent/screen/campus_screen.dart b/lib/campusComponent/screen/campus_screen.dart index 382077c6..e5a56482 100644 --- a/lib/campusComponent/screen/campus_screen.dart +++ b/lib/campusComponent/screen/campus_screen.dart @@ -8,6 +8,25 @@ class CampusScreen extends StatelessWidget { @override Widget build(BuildContext context) { + return OrientationBuilder( + builder: (context, orientation) { + if (orientation == Orientation.portrait) { + return body(); + } else { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Spacer(), + Expanded(flex: 2, child: body()), + const Spacer(), + ], + ); + } + }, + ); + } + + Widget body() { return const SingleChildScrollView( child: Column( children: [ diff --git a/lib/campusComponent/screen/student_clubs_screen.dart b/lib/campusComponent/screen/student_clubs_screen.dart index df9b559e..010feb2e 100644 --- a/lib/campusComponent/screen/student_clubs_screen.dart +++ b/lib/campusComponent/screen/student_clubs_screen.dart @@ -41,7 +41,7 @@ class StudentClubsScreen extends ConsumerWidget { right: 11, ), child: GridView.count( - crossAxisCount: 2, + crossAxisCount: crossAxisCount(context), children: [ for (var studentClub in collection.clubs) Padding( @@ -85,4 +85,12 @@ class StudentClubsScreen extends ConsumerWidget { }, ); } + + int crossAxisCount(BuildContext context) { + return MediaQuery.orientationOf(context) == Orientation.landscape + ? 6 + : MediaQuery.sizeOf(context).width > 600 + ? 4 + : 2; + } } diff --git a/lib/campusComponent/view/news/news_widget_view.dart b/lib/campusComponent/view/news/news_widget_view.dart index eacd5def..50e789c9 100644 --- a/lib/campusComponent/view/news/news_widget_view.dart +++ b/lib/campusComponent/view/news/news_widget_view.dart @@ -35,16 +35,15 @@ class _NewsWidgetViewState extends ConsumerState { final fiveNews = ref.watch(newsViewModel).latestFiveNews(); if (fiveNews.isNotEmpty) { return LayoutBuilder( - builder: (context, constraints) { - final width = constraints.maxWidth * 0.8; + builder: (context, boxConstrains) { const height = 300.00; return SizedBox( height: height, child: Padding( padding: const EdgeInsets.only(left: 11), child: CarouselView( - itemExtent: width, - shrinkExtent: width, + itemExtent: width(boxConstrains, context), + shrinkExtent: width(boxConstrains, context), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), @@ -111,4 +110,14 @@ class _NewsWidgetViewState extends ConsumerState { ), ); } + + double width(BoxConstraints boxConstrains, BuildContext context) { + if (boxConstrains.maxWidth > 800) { + return boxConstrains.maxWidth * 0.45; + } else if (boxConstrains.maxWidth > 600) { + return boxConstrains.maxWidth * 0.6; + } else { + return boxConstrains.maxWidth * 0.8; + } + } } diff --git a/lib/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart b/lib/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart index a6612537..16a4f513 100644 --- a/lib/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart +++ b/lib/searchComponent/viewModels/searchableViewModels/student_club_search_viewmodel.dart @@ -18,8 +18,10 @@ class StudentClubSearchViewModel implements SearchViewModel { List studentClubData = []; - Future studentClubSearch( - {bool forcedRefresh = false, required String query}) async { + Future studentClubSearch({ + bool forcedRefresh = false, + required String query, + }) async { if (studentClubData.isEmpty) { return StudentClubService.fetchStudentClubs(forcedRefresh).then( (value) { From 28dc4209c8d90232d9bfae5f1f789fae65481ac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Mon, 9 Sep 2024 19:39:49 +0200 Subject: [PATCH 21/27] Code Cleanup --- lib/base/classes/location.dart | 16 --- lib/base/classes/location.g.dart | 17 --- lib/base/enums/campus.dart | 126 +++++++++--------- .../campus_exception_router.dart | 30 ----- .../errorHandling/error_handling_router.dart | 15 --- lib/base/extensions/campus_exception.dart | 5 - lib/base/routing/router.dart | 2 +- .../{views => util}/color_picker_view.dart | 0 lib/base/util/map_launcher.dart | 106 ++++++++------- lib/base/{views => util}/seperated_list.dart | 0 .../services/calendar_view_service.dart | 8 +- .../views/custom_event_view.dart | 2 +- .../views/event_creation_view.dart | 4 +- .../viewModels/feedback_viewmodel.dart | 12 +- .../views/feedback_form_view.dart | 2 +- lib/homeComponent/model/station.dart | 4 +- .../view/contactCard/contact_card_view.dart | 6 +- .../view/contactCard/contact_view.dart | 4 +- .../view/contactCard/tuition_view.dart | 4 +- .../views/navigatum_room_details_view.dart | 2 +- .../views/navigatum_room_view.dart | 8 +- .../viewModels/onboarding_viewmodel.dart | 10 +- .../views/confirm_view.dart | 58 ++++---- lib/onboardingComponent/views/login_view.dart | 28 ++-- .../views/permission_check_view.dart | 2 +- .../model/personDetails}/contact_info.dart | 0 .../model/personDetails}/contact_info.g.dart | 0 .../model/personDetails}/organisation.dart | 0 .../model/personDetails}/organisation.g.dart | 0 .../model/personDetails}/person_details.dart | 8 +- .../personDetails}/person_details.g.dart | 0 .../model/personDetails}/phone_extension.dart | 0 .../personDetails}/phone_extension.g.dart | 0 .../model/personDetails}/room.dart | 0 .../model/personDetails}/room.g.dart | 0 .../model/personSearch}/person.dart | 0 .../model/personSearch}/person.g.dart | 0 .../model/profile}/profile.dart | 0 .../model/profile}/profile.g.dart | 0 .../model/profile}/tuition.dart | 0 .../model/profile}/tuition.g.dart | 0 .../services/person_details_service.dart | 2 +- .../services/person_search_service.dart | 2 +- .../services/profile_service.dart | 4 +- .../viewModel/person_details_viewmodel.dart | 7 +- .../viewModel/profile_viewmodel.dart | 6 +- .../views/person_details_view.dart | 6 +- .../model/studyRooms/study_room_group.dart | 36 ++--- .../viewModels/study_rooms_viewmodel.dart | 6 +- .../views/cafeterias/cafeteria_view.dart | 7 +- .../views/cafeterias/cafeterias_view.dart | 2 +- .../views/campuses/campus_view.dart | 2 +- .../study_room_group_scaffold.dart | 8 +- .../studyGroups/study_room_group_view.dart | 2 +- .../views/studyGroups/study_rooms_view.dart | 2 +- .../viewModels/global_search_viewmodel.dart | 2 +- .../person_search_viewmodel.dart | 4 +- .../person_search_result_view.dart | 4 +- .../views/personRoomSearch/search_view.dart | 6 +- .../views/appearance_settings_view.dart | 2 +- lib/settingsComponent/views/contact_view.dart | 2 +- .../views/general_settings_view.dart | 2 +- .../lectureDetail/lecture_details_view.dart | 2 +- .../lectureDetail/lecture_info_card_view.dart | 2 +- pubspec.lock | 4 +- 65 files changed, 278 insertions(+), 323 deletions(-) delete mode 100644 lib/base/classes/location.dart delete mode 100644 lib/base/classes/location.g.dart delete mode 100644 lib/base/errorHandling/campus_exception_router.dart delete mode 100644 lib/base/extensions/campus_exception.dart rename lib/base/{views => util}/color_picker_view.dart (100%) rename lib/base/{views => util}/seperated_list.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/contact_info.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/contact_info.g.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/organisation.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/organisation.g.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/person_details.dart (89%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/person_details.g.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/phone_extension.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/phone_extension.g.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/room.dart (100%) rename lib/{personDetailedComponent/model => personComponent/model/personDetails}/room.g.dart (100%) rename lib/{personSearchComponent/model => personComponent/model/personSearch}/person.dart (100%) rename lib/{personSearchComponent/model => personComponent/model/personSearch}/person.g.dart (100%) rename lib/{profileComponent/model => personComponent/model/profile}/profile.dart (100%) rename lib/{profileComponent/model => personComponent/model/profile}/profile.g.dart (100%) rename lib/{profileComponent/model => personComponent/model/profile}/tuition.dart (100%) rename lib/{profileComponent/model => personComponent/model/profile}/tuition.g.dart (100%) rename lib/{personDetailedComponent => personComponent}/services/person_details_service.dart (91%) rename lib/{personSearchComponent => personComponent}/services/person_search_service.dart (91%) rename lib/{profileComponent => personComponent}/services/profile_service.dart (89%) rename lib/{personDetailedComponent => personComponent}/viewModel/person_details_viewmodel.dart (83%) rename lib/{profileComponent => personComponent}/viewModel/profile_viewmodel.dart (80%) rename lib/{personDetailedComponent => personComponent}/views/person_details_view.dart (96%) rename lib/{personSearchComponent/viewModel => searchComponent/viewModels/searchableViewModels}/person_search_viewmodel.dart (81%) diff --git a/lib/base/classes/location.dart b/lib/base/classes/location.dart deleted file mode 100644 index e79fbb85..00000000 --- a/lib/base/classes/location.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; - -part 'location.g.dart'; - -@JsonSerializable() -class Location { - final double latitude; - final double longitude; - - Location({required this.latitude, required this.longitude}); - - factory Location.fromJson(Map json) => - _$LocationFromJson(json); - - Map toJson() => _$LocationToJson(this); -} diff --git a/lib/base/classes/location.g.dart b/lib/base/classes/location.g.dart deleted file mode 100644 index d125154e..00000000 --- a/lib/base/classes/location.g.dart +++ /dev/null @@ -1,17 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'location.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -Location _$LocationFromJson(Map json) => Location( - latitude: (json['latitude'] as num).toDouble(), - longitude: (json['longitude'] as num).toDouble(), - ); - -Map _$LocationToJson(Location instance) => { - 'latitude': instance.latitude, - 'longitude': instance.longitude, - }; diff --git a/lib/base/enums/campus.dart b/lib/base/enums/campus.dart index c4c63c82..0e397257 100644 --- a/lib/base/enums/campus.dart +++ b/lib/base/enums/campus.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/base/classes/location.dart'; import 'package:campus_flutter/homeComponent/model/station.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; enum Campus { stammgelaende("Stammgelände"), @@ -59,42 +59,42 @@ extension CampusExtension on Campus { } } - Location get location { + LatLng get location { switch (this) { case Campus.stammgelaende: - return Location( - latitude: 48.14887567648079, - longitude: 11.568029074814328, + return const LatLng( + 48.14887567648079, + 11.568029074814328, ); case Campus.olympiapark: - return Location( - latitude: 48.17957305879896, - longitude: 11.546601863009668, + return const LatLng( + 48.17957305879896, + 11.546601863009668, ); case Campus.klinikumRechts: - return Location( - latitude: 48.13760759635786, - longitude: 11.60083902677729, + return const LatLng( + 48.13760759635786, + 11.60083902677729, ); case Campus.grosshadern: - return Location( - latitude: 48.1116433849602, - longitude: 11.47027262422505, + return const LatLng( + 48.1116433849602, + 11.47027262422505, ); case Campus.garching: - return Location( - latitude: 48.26513710129958, - longitude: 11.671590834492283, + return const LatLng( + 48.26513710129958, + 11.671590834492283, ); case Campus.freising: - return Location( - latitude: 48.39549985559942, - longitude: 11.727904526510946, + return const LatLng( + 48.39549985559942, + 11.727904526510946, ); } } - Map getAll() { + Map getAll() { return Map.fromEntries(Campus.values.map((e) => MapEntry(e, e.location))); } @@ -104,54 +104,54 @@ extension CampusExtension on Campus { return Station( name: "Technische Universität", apiName: "91000095", - location: Location( - latitude: 48.148145129847244, - longitude: 11.566048520744298, + location: const LatLng( + 48.148145129847244, + 11.566048520744298, ), ); case Campus.olympiapark: return Station( name: "Olympiazentrum", apiName: "91000350", - location: Location( - latitude: 48.17946648767361, - longitude: 11.555783595899824, + location: const LatLng( + 48.17946648767361, + 11.555783595899824, ), ); case Campus.klinikumRechts: return Station( name: "Max-Weber-Platz", apiName: "91000580", - location: Location( - latitude: 48.13573243097588, - longitude: 11.599014647301777, + location: const LatLng( + 48.13573243097588, + 11.599014647301777, ), ); case Campus.grosshadern: return Station( name: "Klinikum Großhadern", apiName: "91001540", - location: Location( - latitude: 48.10889880944028, - longitude: 11.47363212095666, + location: const LatLng( + 48.10889880944028, + 11.47363212095666, ), ); case Campus.garching: return Station( name: "Forschungszentrum", apiName: "1000460", - location: Location( - latitude: 48.26519145730091, - longitude: 11.671545161597082, + location: const LatLng( + 48.26519145730091, + 11.671545161597082, ), ); case Campus.freising: return Station( name: "Freising, Weihenstephan", apiName: "1002911", - location: Location( - latitude: 48.39799498961109, - longitude: 11.723989661968458, + location: const LatLng( + 48.39799498961109, + 11.723989661968458, ), ); } @@ -165,17 +165,17 @@ extension CampusExtension on Campus { Station( name: "Theresienstraße", apiName: "91000120", - location: Location( - latitude: 48.1512235719802, - longitude: 11.564211669898931, + location: const LatLng( + 48.1512235719802, + 11.564211669898931, ), ), Station( name: "Pinakotheken", apiName: "91000051", - location: Location( - latitude: 48.148780089472, - longitude: 11.571870970398924, + location: const LatLng( + 48.148780089472, + 11.571870970398924, ), ), ]; @@ -187,9 +187,9 @@ extension CampusExtension on Campus { Station( name: "Friedensengel/Villa Stuck", apiName: "91000073", - location: Location( - latitude: 48.14074544433942, - longitude: 11.600075277341709, + location: const LatLng( + 48.14074544433942, + 11.600075277341709, ), ), ]; @@ -199,17 +199,17 @@ extension CampusExtension on Campus { Station( name: "Klinikum Großhadern Ost", apiName: "91001472", - location: Location( - latitude: 48.11092668280441, - longitude: 11.473909030506093, + location: const LatLng( + 48.11092668280441, + 11.473909030506093, ), ), Station( name: "Klinikum Großhadern Nord", apiName: "91001474", - location: Location( - latitude: 48.11250562334001, - longitude: 11.467122898318992, + location: const LatLng( + 48.11250562334001, + 11.467122898318992, ), ), ]; @@ -219,9 +219,9 @@ extension CampusExtension on Campus { Station( name: "Lichtenbergstraße", apiName: "1002070", - location: Location( - latitude: 48.26777168760462, - longitude: 11.665502685140389, + location: const LatLng( + 48.26777168760462, + 11.665502685140389, ), ), ]; @@ -231,17 +231,17 @@ extension CampusExtension on Campus { Station( name: "Freising, Forstzentrum", apiName: "1009413", - location: Location( - latitude: 48.39924842116169, - longitude: 11.716601891310122, + location: const LatLng( + 48.39924842116169, + 11.716601891310122, ), ), Station( name: "Freising, Weihenstephaner Berg", apiName: "1002617", - location: Location( - latitude: 48.39581877364193, - longitude: 11.725859432987532, + location: const LatLng( + 48.39581877364193, + 11.725859432987532, ), ), ]; diff --git a/lib/base/errorHandling/campus_exception_router.dart b/lib/base/errorHandling/campus_exception_router.dart deleted file mode 100644 index 84765f7c..00000000 --- a/lib/base/errorHandling/campus_exception_router.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; -import 'package:campus_flutter/base/errorHandling/error_handling_view.dart'; -import 'package:campus_flutter/base/extensions/campus_exception.dart'; -import 'package:flutter/material.dart'; - -class CampusExceptionRouter extends StatelessWidget with ErrorHandlingView { - CampusExceptionRouter({ - super.key, - required this.campusException, - required ErrorHandlingViewType errorHandlingViewType, - Function()? retry, - Color? titleColor, - Color? bodyColor, - }) { - this.errorHandlingViewType = errorHandlingViewType; - this.retry = retry; - this.titleColor = titleColor; - this.bodyColor = bodyColor; - } - - final CampusException campusException; - - @override - Widget build(BuildContext context) { - return exceptionMessage( - errorMessage: campusException.message, - context: context, - ); - } -} diff --git a/lib/base/errorHandling/error_handling_router.dart b/lib/base/errorHandling/error_handling_router.dart index 754e8a85..648d2562 100644 --- a/lib/base/errorHandling/error_handling_router.dart +++ b/lib/base/errorHandling/error_handling_router.dart @@ -1,13 +1,11 @@ import 'package:campus_flutter/base/enums/credentials.dart'; import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; -import 'package:campus_flutter/base/errorHandling/campus_exception_router.dart'; import 'package:campus_flutter/base/errorHandling/default_error_router.dart'; import 'package:campus_flutter/base/errorHandling/dio_exception_router.dart'; import 'package:campus_flutter/base/errorHandling/grpc_error_router.dart'; import 'package:campus_flutter/base/errorHandling/search_exception_router.dart'; import 'package:campus_flutter/base/errorHandling/tum_online_api_exception_router.dart'; import 'package:campus_flutter/base/errorHandling/type_error_router.dart'; -import 'package:campus_flutter/base/extensions/campus_exception.dart'; import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_exception.dart'; import 'package:campus_flutter/onboardingComponent/viewModels/onboarding_viewmodel.dart'; import 'package:campus_flutter/searchComponent/model/search_exception.dart'; @@ -89,19 +87,6 @@ class ErrorHandlingRouter extends ConsumerWidget { titleColor: titleColor, bodyColor: bodyColor, ); - case CampusException campusException: - recordFlutterError( - FlutterErrorDetails( - exception: campusException, - ), - ); - return CampusExceptionRouter( - campusException: campusException, - errorHandlingViewType: errorHandlingViewType, - retry: retry, - titleColor: titleColor, - bodyColor: bodyColor, - ); case TypeError typeError: recordFlutterError( FlutterErrorDetails( diff --git a/lib/base/extensions/campus_exception.dart b/lib/base/extensions/campus_exception.dart deleted file mode 100644 index 6c0368a4..00000000 --- a/lib/base/extensions/campus_exception.dart +++ /dev/null @@ -1,5 +0,0 @@ -class CampusException implements Exception { - final String message; - - CampusException(this.message); -} diff --git a/lib/base/routing/router.dart b/lib/base/routing/router.dart index 50e4e9d7..4661e346 100644 --- a/lib/base/routing/router.dart +++ b/lib/base/routing/router.dart @@ -19,7 +19,7 @@ import 'package:campus_flutter/onboardingComponent/views/login_view.dart'; import 'package:campus_flutter/main.dart'; import 'package:campus_flutter/navigation.dart'; import 'package:campus_flutter/onboardingComponent/views/permission_check_view.dart'; -import 'package:campus_flutter/personDetailedComponent/views/person_details_view.dart'; +import 'package:campus_flutter/personComponent/views/person_details_view.dart'; import 'package:campus_flutter/placesComponent/model/cafeterias/cafeteria.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room_group.dart'; import 'package:campus_flutter/placesComponent/views/cafeterias/cafeteria_view.dart'; diff --git a/lib/base/views/color_picker_view.dart b/lib/base/util/color_picker_view.dart similarity index 100% rename from lib/base/views/color_picker_view.dart rename to lib/base/util/color_picker_view.dart diff --git a/lib/base/util/map_launcher.dart b/lib/base/util/map_launcher.dart index 386ce082..7be133a3 100644 --- a/lib/base/util/map_launcher.dart +++ b/lib/base/util/map_launcher.dart @@ -1,72 +1,76 @@ -import 'package:campus_flutter/base/classes/location.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:go_router/go_router.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:map_launcher/map_launcher.dart'; Future showDirectionsDialog( String name, - Location location, + LatLng location, BuildContext context, ) async { MapLauncher.installedMaps.then( - (value) => showModalBottomSheet( - isDismissible: true, - showDragHandle: true, - context: context, - builder: (context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: EdgeInsets.only( - bottom: context.halfPadding, - ), - child: Text(context.tr("selectAction")), - ), - Card( - child: ListView.separated( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - padding: EdgeInsets.zero, - itemBuilder: (context, index) => ListTile( - leading: ClipRRect( - borderRadius: BorderRadius.circular(5), - child: SvgPicture.asset( - value[index].icon, - height: 30, - width: 30, + (value) { + if (context.mounted) { + showModalBottomSheet( + isDismissible: true, + showDragHandle: true, + context: context, + builder: (context) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: EdgeInsets.only( + bottom: context.halfPadding, + ), + child: Text(context.tr("selectAction")), + ), + Card( + child: ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: EdgeInsets.zero, + itemBuilder: (context, index) => ListTile( + leading: ClipRRect( + borderRadius: BorderRadius.circular(5), + child: SvgPicture.asset( + value[index].icon, + height: 30, + width: 30, + ), + ), + title: Text( + context.tr("openIn", args: [value[index].mapName]), + ), + onTap: () => MapLauncher.showMarker( + mapType: value[index].mapType, + title: name, + coords: Coords(location.latitude, location.longitude), + ), ), + separatorBuilder: (context, index) => const PaddedDivider(), + itemCount: value.length, ), - title: Text( - context.tr("openIn", args: [value[index].mapName]), + ), + Padding( + padding: EdgeInsets.only( + top: context.padding, + bottom: context.padding * 2, ), - onTap: () => MapLauncher.showMarker( - mapType: value[index].mapType, - title: name, - coords: Coords(location.latitude, location.longitude), + child: ElevatedButton( + onPressed: () => context.pop(), + child: Text(context.tr("cancel")), ), ), - separatorBuilder: (context, index) => const PaddedDivider(), - itemCount: value.length, - ), - ), - Padding( - padding: EdgeInsets.only( - top: context.padding, - bottom: context.padding * 2, - ), - child: ElevatedButton( - onPressed: () => context.pop(), - child: Text(context.tr("cancel")), - ), - ), - ], + ], + ); + }, ); - }, - ), + } + }, ); } diff --git a/lib/base/views/seperated_list.dart b/lib/base/util/seperated_list.dart similarity index 100% rename from lib/base/views/seperated_list.dart rename to lib/base/util/seperated_list.dart diff --git a/lib/calendarComponent/services/calendar_view_service.dart b/lib/calendarComponent/services/calendar_view_service.dart index 994e1f36..af9d3986 100644 --- a/lib/calendarComponent/services/calendar_view_service.dart +++ b/lib/calendarComponent/services/calendar_view_service.dart @@ -73,7 +73,13 @@ class CalendarViewService { ref .read(calendarViewModel) .deleteCalendarElement(calendarEvent!.id) - .then((value) => context.pop()); + .then( + (value) { + if (context.mounted) { + context.pop(); + } + }, + ); }, child: Text(context.tr("delete")), ), diff --git a/lib/calendarComponent/views/custom_event_view.dart b/lib/calendarComponent/views/custom_event_view.dart index 97c0fcff..bf11e28f 100644 --- a/lib/calendarComponent/views/custom_event_view.dart +++ b/lib/calendarComponent/views/custom_event_view.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/extensions/context.dart'; -import 'package:campus_flutter/base/views/color_picker_view.dart'; +import 'package:campus_flutter/base/util/color_picker_view.dart'; import 'package:campus_flutter/calendarComponent/model/calendar_event.dart'; import 'package:campus_flutter/calendarComponent/viewModels/calendar_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; diff --git a/lib/calendarComponent/views/event_creation_view.dart b/lib/calendarComponent/views/event_creation_view.dart index 49d75584..55fca45f 100644 --- a/lib/calendarComponent/views/event_creation_view.dart +++ b/lib/calendarComponent/views/event_creation_view.dart @@ -107,7 +107,9 @@ class EventCreationView extends ConsumerWidget { .saveEvent() .then((value) { ref.invalidate(calendarAdditionViewModel); - context.canPop() ? context.pop() : context.go(calendar); + if (context.mounted) { + context.canPop() ? context.pop() : context.go(calendar); + } }) : null, child: Text(context.tr("submit")), diff --git a/lib/feedbackComponent/viewModels/feedback_viewmodel.dart b/lib/feedbackComponent/viewModels/feedback_viewmodel.dart index 73d04f5b..78f8a5b2 100644 --- a/lib/feedbackComponent/viewModels/feedback_viewmodel.dart +++ b/lib/feedbackComponent/viewModels/feedback_viewmodel.dart @@ -4,7 +4,7 @@ import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dar import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/services/location_service.dart'; import 'package:campus_flutter/feedbackComponent/services/feedback_service.dart'; -import 'package:campus_flutter/personDetailedComponent/viewModel/person_details_viewmodel.dart'; +import 'package:campus_flutter/personComponent/viewModel/person_details_viewmodel.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -76,9 +76,15 @@ class FeedbackViewModel { FeedbackService.sendFeedback(feedback).then( (value) { - context.pushReplacement(feedbackSuccess); + if (context.mounted) { + context.pushReplacement(feedbackSuccess); + } + }, + onError: (error) { + if (context.mounted) { + _errorDialog(error, context); + } }, - onError: (error) => _errorDialog(error, context), ); } diff --git a/lib/feedbackComponent/views/feedback_form_view.dart b/lib/feedbackComponent/views/feedback_form_view.dart index caf2e907..0c191a48 100644 --- a/lib/feedbackComponent/views/feedback_form_view.dart +++ b/lib/feedbackComponent/views/feedback_form_view.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/base/util/custom_back_button.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/feedbackComponent/viewModels/feedback_viewmodel.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_checkmark_view.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_textfield.dart'; diff --git a/lib/homeComponent/model/station.dart b/lib/homeComponent/model/station.dart index 25d6e9c5..b824e5fb 100644 --- a/lib/homeComponent/model/station.dart +++ b/lib/homeComponent/model/station.dart @@ -1,4 +1,4 @@ -import 'package:campus_flutter/base/classes/location.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:json_annotation/json_annotation.dart'; part 'station.g.dart'; @@ -9,7 +9,7 @@ part 'station.g.dart'; class Station { final String name; final String apiName; - final Location? location; + final LatLng? location; Station({required this.name, required this.apiName, this.location}); diff --git a/lib/homeComponent/view/contactCard/contact_card_view.dart b/lib/homeComponent/view/contactCard/contact_card_view.dart index b702f4e5..9ce47f2d 100644 --- a/lib/homeComponent/view/contactCard/contact_card_view.dart +++ b/lib/homeComponent/view/contactCard/contact_card_view.dart @@ -3,9 +3,9 @@ import 'package:campus_flutter/base/extensions/base_64_decode_image_data.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/homeComponent/view/contactCard/contact_card_loading_view.dart'; import 'package:campus_flutter/navigation_service.dart'; -import 'package:campus_flutter/personDetailedComponent/model/person_details.dart'; -import 'package:campus_flutter/personDetailedComponent/viewModel/person_details_viewmodel.dart'; -import 'package:campus_flutter/profileComponent/model/profile.dart'; +import 'package:campus_flutter/personComponent/model/personDetails/person_details.dart'; +import 'package:campus_flutter/personComponent/model/profile/profile.dart'; +import 'package:campus_flutter/personComponent/viewModel/person_details_viewmodel.dart'; import 'package:campus_flutter/studentCardComponent/viewModel/student_card_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/homeComponent/view/contactCard/contact_view.dart b/lib/homeComponent/view/contactCard/contact_view.dart index 2f6bc405..07a48a1b 100644 --- a/lib/homeComponent/view/contactCard/contact_view.dart +++ b/lib/homeComponent/view/contactCard/contact_view.dart @@ -6,8 +6,8 @@ import 'package:campus_flutter/homeComponent/view/contactCard/link_view.dart'; import 'package:campus_flutter/homeComponent/view/contactCard/tuition_view.dart'; import 'package:campus_flutter/homeComponent/view/contactCard/contact_card_unauthorized_view.dart'; import 'package:campus_flutter/onboardingComponent/viewModels/onboarding_viewmodel.dart'; -import 'package:campus_flutter/profileComponent/model/profile.dart'; -import 'package:campus_flutter/profileComponent/viewModel/profile_viewmodel.dart'; +import 'package:campus_flutter/personComponent/model/profile/profile.dart'; +import 'package:campus_flutter/personComponent/viewModel/profile_viewmodel.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/homeComponent/view/contactCard/tuition_view.dart b/lib/homeComponent/view/contactCard/tuition_view.dart index 5f07b520..2781742a 100644 --- a/lib/homeComponent/view/contactCard/tuition_view.dart +++ b/lib/homeComponent/view/contactCard/tuition_view.dart @@ -1,8 +1,8 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/icon_text.dart'; import 'package:campus_flutter/base/util/info_row.dart'; -import 'package:campus_flutter/profileComponent/model/tuition.dart'; -import 'package:campus_flutter/profileComponent/viewModel/profile_viewmodel.dart'; +import 'package:campus_flutter/personComponent/model/profile/tuition.dart'; +import 'package:campus_flutter/personComponent/viewModel/profile_viewmodel.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/navigaTumComponent/views/navigatum_room_details_view.dart b/lib/navigaTumComponent/views/navigatum_room_details_view.dart index 4d75ca01..ad4ed51a 100644 --- a/lib/navigaTumComponent/views/navigatum_room_details_view.dart +++ b/lib/navigaTumComponent/views/navigatum_room_details_view.dart @@ -1,4 +1,4 @@ -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/navigaTumComponent/model/navigatum_navigation_property.dart'; import 'package:campus_flutter/base/extensions/context.dart'; diff --git a/lib/navigaTumComponent/views/navigatum_room_view.dart b/lib/navigaTumComponent/views/navigatum_room_view.dart index 8f9a85fb..675d43cf 100644 --- a/lib/navigaTumComponent/views/navigatum_room_view.dart +++ b/lib/navigaTumComponent/views/navigatum_room_view.dart @@ -1,4 +1,3 @@ -import 'package:campus_flutter/base/classes/location.dart'; import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/util/custom_back_button.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; @@ -13,6 +12,7 @@ import 'package:campus_flutter/base/extensions/context.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; class NavigaTumRoomScaffold extends ConsumerWidget { const NavigaTumRoomScaffold({super.key, required this.id}); @@ -51,9 +51,9 @@ class NavigaTumRoomScaffold extends ConsumerWidget { return IconButton( onPressed: () => showDirectionsDialog( details.name, - Location( - latitude: details.coordinates.latitude!, - longitude: details.coordinates.longitude!, + LatLng( + details.coordinates.latitude!, + details.coordinates.longitude!, ), context, ), diff --git a/lib/onboardingComponent/viewModels/onboarding_viewmodel.dart b/lib/onboardingComponent/viewModels/onboarding_viewmodel.dart index 5db5e23d..a12a55da 100644 --- a/lib/onboardingComponent/viewModels/onboarding_viewmodel.dart +++ b/lib/onboardingComponent/viewModels/onboarding_viewmodel.dart @@ -10,8 +10,8 @@ import 'package:campus_flutter/calendarComponent/viewModels/calendar_viewmodel.d import 'package:campus_flutter/onboardingComponent/model/confirm.dart'; import 'package:campus_flutter/onboardingComponent/services/onboarding_service.dart'; import 'package:campus_flutter/main.dart'; -import 'package:campus_flutter/personDetailedComponent/viewModel/person_details_viewmodel.dart'; -import 'package:campus_flutter/profileComponent/viewModel/profile_viewmodel.dart'; +import 'package:campus_flutter/personComponent/viewModel/person_details_viewmodel.dart'; +import 'package:campus_flutter/personComponent/viewModel/profile_viewmodel.dart'; import 'package:campus_flutter/settingsComponent/service/user_preferences_service.dart'; import 'package:campus_flutter/settingsComponent/viewModels/user_preferences_viewmodel.dart'; import 'package:campus_flutter/studentCardComponent/viewModel/student_card_viewmodel.dart'; @@ -128,7 +128,11 @@ class OnboardingViewModel { Future requestLocation(WidgetRef ref, BuildContext context) async { Permission.location.request().then( (value) { - finishOnboarding(ref, context); + { + if (context.mounted) { + finishOnboarding(ref, context); + } + } }, ); } diff --git a/lib/onboardingComponent/views/confirm_view.dart b/lib/onboardingComponent/views/confirm_view.dart index 69fb473d..dd0ff6ef 100644 --- a/lib/onboardingComponent/views/confirm_view.dart +++ b/lib/onboardingComponent/views/confirm_view.dart @@ -132,7 +132,7 @@ class _ConfirmViewState extends ConsumerState { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _tumOnlineButton(), - _checkTokenButton(), + _checkTokenButton(context), ], ), const Padding(padding: EdgeInsets.symmetric(vertical: 10)), @@ -174,7 +174,7 @@ class _ConfirmViewState extends ConsumerState { ), Padding( padding: EdgeInsets.symmetric(vertical: context.halfPadding), - child: _checkTokenButton(), + child: _checkTokenButton(context), ), _contactSupportButton(), ], @@ -199,13 +199,15 @@ class _ConfirmViewState extends ConsumerState { ); } - Widget _checkTokenButton() { + Widget _checkTokenButton(BuildContext context) { return ElevatedButton( onPressed: () { ref.read(onboardingViewModel).confirmLogin().then( (value) { if (value.confirmed) { - context.push(permissionCheck); + if (context.mounted) { + context.push(permissionCheck); + } } else { throw TumOnlineApiException( tumOnlineApiExceptionType: @@ -214,29 +216,35 @@ class _ConfirmViewState extends ConsumerState { } }, onError: (error) { - ScaffoldMessenger.maybeOf(context)?.showSnackBar( - SnackBar( - duration: const Duration(seconds: 10), - content: ErrorHandlingRouter( - error: error, - errorHandlingViewType: ErrorHandlingViewType.textOnly, - titleColor: Colors.white, + if (context.mounted) { + ScaffoldMessenger.maybeOf(context)?.showSnackBar( + SnackBar( + duration: const Duration(seconds: 10), + content: ErrorHandlingRouter( + error: error, + errorHandlingViewType: ErrorHandlingViewType.textOnly, + titleColor: Colors.white, + ), ), - ), - ); + ); + } }, - ).catchError((error) { - ScaffoldMessenger.maybeOf(context)?.showSnackBar( - SnackBar( - duration: const Duration(seconds: 10), - content: ErrorHandlingRouter( - error: error, - errorHandlingViewType: ErrorHandlingViewType.textOnly, - titleColor: Colors.white, - ), - ), - ); - }); + ).catchError( + (error) { + if (context.mounted) { + ScaffoldMessenger.maybeOf(context)?.showSnackBar( + SnackBar( + duration: const Duration(seconds: 10), + content: ErrorHandlingRouter( + error: error, + errorHandlingViewType: ErrorHandlingViewType.textOnly, + titleColor: Colors.white, + ), + ), + ); + } + }, + ); }, child: IconText( iconData: Icons.arrow_forward, diff --git a/lib/onboardingComponent/views/login_view.dart b/lib/onboardingComponent/views/login_view.dart index f18ccd39..3d11c25a 100644 --- a/lib/onboardingComponent/views/login_view.dart +++ b/lib/onboardingComponent/views/login_view.dart @@ -205,19 +205,25 @@ class _LoginViewState extends ConsumerState { onPressed: (snapshot.data != null && snapshot.data!) ? () { ref.read(onboardingViewModel).requestLogin().then( - (value) => context.push(confirm), + (value) { + if (context.mounted) { + context.push(confirm); + } + }, onError: (error) { - ScaffoldMessenger.maybeOf(context)?.showSnackBar( - SnackBar( - duration: const Duration(seconds: 10), - content: ErrorHandlingRouter( - error: error, - errorHandlingViewType: - ErrorHandlingViewType.textOnly, - titleColor: Colors.white, + if (context.mounted) { + ScaffoldMessenger.maybeOf(context)?.showSnackBar( + SnackBar( + duration: const Duration(seconds: 10), + content: ErrorHandlingRouter( + error: error, + errorHandlingViewType: + ErrorHandlingViewType.textOnly, + titleColor: Colors.white, + ), ), - ), - ); + ); + } }, ); } diff --git a/lib/onboardingComponent/views/permission_check_view.dart b/lib/onboardingComponent/views/permission_check_view.dart index 77cec8ae..740873ff 100644 --- a/lib/onboardingComponent/views/permission_check_view.dart +++ b/lib/onboardingComponent/views/permission_check_view.dart @@ -1,9 +1,9 @@ import 'package:campus_flutter/base/util/custom_back_button.dart'; import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/calendarComponent/services/calendar_service.dart'; +import 'package:campus_flutter/personComponent/services/profile_service.dart'; import 'package:campus_flutter/studiesComponent/service/grade_service.dart'; import 'package:campus_flutter/studiesComponent/service/lecture_service.dart'; -import 'package:campus_flutter/profileComponent/services/profile_service.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; diff --git a/lib/personDetailedComponent/model/contact_info.dart b/lib/personComponent/model/personDetails/contact_info.dart similarity index 100% rename from lib/personDetailedComponent/model/contact_info.dart rename to lib/personComponent/model/personDetails/contact_info.dart diff --git a/lib/personDetailedComponent/model/contact_info.g.dart b/lib/personComponent/model/personDetails/contact_info.g.dart similarity index 100% rename from lib/personDetailedComponent/model/contact_info.g.dart rename to lib/personComponent/model/personDetails/contact_info.g.dart diff --git a/lib/personDetailedComponent/model/organisation.dart b/lib/personComponent/model/personDetails/organisation.dart similarity index 100% rename from lib/personDetailedComponent/model/organisation.dart rename to lib/personComponent/model/personDetails/organisation.dart diff --git a/lib/personDetailedComponent/model/organisation.g.dart b/lib/personComponent/model/personDetails/organisation.g.dart similarity index 100% rename from lib/personDetailedComponent/model/organisation.g.dart rename to lib/personComponent/model/personDetails/organisation.g.dart diff --git a/lib/personDetailedComponent/model/person_details.dart b/lib/personComponent/model/personDetails/person_details.dart similarity index 89% rename from lib/personDetailedComponent/model/person_details.dart rename to lib/personComponent/model/personDetails/person_details.dart index 3672ea47..f8369067 100644 --- a/lib/personDetailedComponent/model/person_details.dart +++ b/lib/personComponent/model/personDetails/person_details.dart @@ -1,9 +1,9 @@ -import 'package:campus_flutter/personDetailedComponent/model/contact_info.dart'; -import 'package:campus_flutter/personDetailedComponent/model/phone_extension.dart'; -import 'package:campus_flutter/personDetailedComponent/model/room.dart'; +import 'package:campus_flutter/personComponent/model/personDetails/contact_info.dart'; +import 'package:campus_flutter/personComponent/model/personDetails/phone_extension.dart'; +import 'package:campus_flutter/personComponent/model/personDetails/room.dart'; import 'package:json_annotation/json_annotation.dart'; -import '../../base/enums/gender.dart'; +import '../../../base/enums/gender.dart'; import 'organisation.dart'; part 'person_details.g.dart'; diff --git a/lib/personDetailedComponent/model/person_details.g.dart b/lib/personComponent/model/personDetails/person_details.g.dart similarity index 100% rename from lib/personDetailedComponent/model/person_details.g.dart rename to lib/personComponent/model/personDetails/person_details.g.dart diff --git a/lib/personDetailedComponent/model/phone_extension.dart b/lib/personComponent/model/personDetails/phone_extension.dart similarity index 100% rename from lib/personDetailedComponent/model/phone_extension.dart rename to lib/personComponent/model/personDetails/phone_extension.dart diff --git a/lib/personDetailedComponent/model/phone_extension.g.dart b/lib/personComponent/model/personDetails/phone_extension.g.dart similarity index 100% rename from lib/personDetailedComponent/model/phone_extension.g.dart rename to lib/personComponent/model/personDetails/phone_extension.g.dart diff --git a/lib/personDetailedComponent/model/room.dart b/lib/personComponent/model/personDetails/room.dart similarity index 100% rename from lib/personDetailedComponent/model/room.dart rename to lib/personComponent/model/personDetails/room.dart diff --git a/lib/personDetailedComponent/model/room.g.dart b/lib/personComponent/model/personDetails/room.g.dart similarity index 100% rename from lib/personDetailedComponent/model/room.g.dart rename to lib/personComponent/model/personDetails/room.g.dart diff --git a/lib/personSearchComponent/model/person.dart b/lib/personComponent/model/personSearch/person.dart similarity index 100% rename from lib/personSearchComponent/model/person.dart rename to lib/personComponent/model/personSearch/person.dart diff --git a/lib/personSearchComponent/model/person.g.dart b/lib/personComponent/model/personSearch/person.g.dart similarity index 100% rename from lib/personSearchComponent/model/person.g.dart rename to lib/personComponent/model/personSearch/person.g.dart diff --git a/lib/profileComponent/model/profile.dart b/lib/personComponent/model/profile/profile.dart similarity index 100% rename from lib/profileComponent/model/profile.dart rename to lib/personComponent/model/profile/profile.dart diff --git a/lib/profileComponent/model/profile.g.dart b/lib/personComponent/model/profile/profile.g.dart similarity index 100% rename from lib/profileComponent/model/profile.g.dart rename to lib/personComponent/model/profile/profile.g.dart diff --git a/lib/profileComponent/model/tuition.dart b/lib/personComponent/model/profile/tuition.dart similarity index 100% rename from lib/profileComponent/model/tuition.dart rename to lib/personComponent/model/profile/tuition.dart diff --git a/lib/profileComponent/model/tuition.g.dart b/lib/personComponent/model/profile/tuition.g.dart similarity index 100% rename from lib/profileComponent/model/tuition.g.dart rename to lib/personComponent/model/profile/tuition.g.dart diff --git a/lib/personDetailedComponent/services/person_details_service.dart b/lib/personComponent/services/person_details_service.dart similarity index 91% rename from lib/personDetailedComponent/services/person_details_service.dart rename to lib/personComponent/services/person_details_service.dart index 573be26a..fd9df9e3 100644 --- a/lib/personDetailedComponent/services/person_details_service.dart +++ b/lib/personComponent/services/person_details_service.dart @@ -2,8 +2,8 @@ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api. import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_exception.dart'; import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_service.dart'; import 'package:campus_flutter/base/networking/base/rest_client.dart'; -import 'package:campus_flutter/personDetailedComponent/model/person_details.dart'; import 'package:campus_flutter/main.dart'; +import 'package:campus_flutter/personComponent/model/personDetails/person_details.dart'; class PersonDetailsService { static Future<(DateTime?, PersonDetails)> fetchPersonDetails( diff --git a/lib/personSearchComponent/services/person_search_service.dart b/lib/personComponent/services/person_search_service.dart similarity index 91% rename from lib/personSearchComponent/services/person_search_service.dart rename to lib/personComponent/services/person_search_service.dart index 31428432..5aae4bf4 100644 --- a/lib/personSearchComponent/services/person_search_service.dart +++ b/lib/personComponent/services/person_search_service.dart @@ -2,7 +2,7 @@ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api. import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_exception.dart'; import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_service.dart'; import 'package:campus_flutter/base/networking/base/rest_client.dart'; -import 'package:campus_flutter/personSearchComponent/model/person.dart'; +import 'package:campus_flutter/personComponent/model/personSearch/person.dart'; import 'package:campus_flutter/main.dart'; class PersonSearchService { diff --git a/lib/profileComponent/services/profile_service.dart b/lib/personComponent/services/profile_service.dart similarity index 89% rename from lib/profileComponent/services/profile_service.dart rename to lib/personComponent/services/profile_service.dart index d1525f7f..3b05f384 100644 --- a/lib/profileComponent/services/profile_service.dart +++ b/lib/personComponent/services/profile_service.dart @@ -3,8 +3,8 @@ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api.dart'; import 'package:campus_flutter/base/networking/base/rest_client.dart'; import 'package:campus_flutter/main.dart'; -import 'package:campus_flutter/profileComponent/model/profile.dart'; -import 'package:campus_flutter/profileComponent/model/tuition.dart'; +import 'package:campus_flutter/personComponent/model/profile/profile.dart'; +import 'package:campus_flutter/personComponent/model/profile/tuition.dart'; class ProfileService { static Future<(DateTime?, Profile)> fetchProfile(bool forcedRefresh) async { diff --git a/lib/personDetailedComponent/viewModel/person_details_viewmodel.dart b/lib/personComponent/viewModel/person_details_viewmodel.dart similarity index 83% rename from lib/personDetailedComponent/viewModel/person_details_viewmodel.dart rename to lib/personComponent/viewModel/person_details_viewmodel.dart index 44408d2a..46949fe1 100644 --- a/lib/personDetailedComponent/viewModel/person_details_viewmodel.dart +++ b/lib/personComponent/viewModel/person_details_viewmodel.dart @@ -1,8 +1,7 @@ import 'package:campus_flutter/base/networking/apis/tumOnlineApi/tum_online_api_exception.dart'; - -import 'package:campus_flutter/personDetailedComponent/model/person_details.dart'; -import 'package:campus_flutter/personDetailedComponent/services/person_details_service.dart'; -import 'package:campus_flutter/profileComponent/viewModel/profile_viewmodel.dart'; +import 'package:campus_flutter/personComponent/model/personDetails/person_details.dart'; +import 'package:campus_flutter/personComponent/services/person_details_service.dart'; +import 'package:campus_flutter/personComponent/viewModel/profile_viewmodel.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; diff --git a/lib/profileComponent/viewModel/profile_viewmodel.dart b/lib/personComponent/viewModel/profile_viewmodel.dart similarity index 80% rename from lib/profileComponent/viewModel/profile_viewmodel.dart rename to lib/personComponent/viewModel/profile_viewmodel.dart index cfe8a167..a0440a22 100644 --- a/lib/profileComponent/viewModel/profile_viewmodel.dart +++ b/lib/personComponent/viewModel/profile_viewmodel.dart @@ -1,6 +1,6 @@ -import 'package:campus_flutter/profileComponent/model/profile.dart'; -import 'package:campus_flutter/profileComponent/model/tuition.dart'; -import 'package:campus_flutter/profileComponent/services/profile_service.dart'; +import 'package:campus_flutter/personComponent/model/profile/profile.dart'; +import 'package:campus_flutter/personComponent/model/profile/tuition.dart'; +import 'package:campus_flutter/personComponent/services/profile_service.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; diff --git a/lib/personDetailedComponent/views/person_details_view.dart b/lib/personComponent/views/person_details_view.dart similarity index 96% rename from lib/personDetailedComponent/views/person_details_view.dart rename to lib/personComponent/views/person_details_view.dart index bd822989..10de3a35 100644 --- a/lib/personDetailedComponent/views/person_details_view.dart +++ b/lib/personComponent/views/person_details_view.dart @@ -5,10 +5,10 @@ import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/url_launcher.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; -import 'package:campus_flutter/personDetailedComponent/model/person_details.dart'; -import 'package:campus_flutter/personDetailedComponent/viewModel/person_details_viewmodel.dart'; +import 'package:campus_flutter/personComponent/model/personDetails/person_details.dart'; +import 'package:campus_flutter/personComponent/viewModel/person_details_viewmodel.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/placesComponent/model/studyRooms/study_room_group.dart b/lib/placesComponent/model/studyRooms/study_room_group.dart index 8999908e..ad227e7f 100644 --- a/lib/placesComponent/model/studyRooms/study_room_group.dart +++ b/lib/placesComponent/model/studyRooms/study_room_group.dart @@ -1,7 +1,7 @@ -import 'package:campus_flutter/base/classes/location.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room.dart'; import 'package:campus_flutter/searchComponent/model/comparison_token.dart'; import 'package:campus_flutter/searchComponent/protocols/searchable.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:json_annotation/json_annotation.dart'; part 'study_room_group.g.dart'; @@ -17,34 +17,34 @@ class StudyRoomGroup extends Searchable { @JsonKey(name: "raeume") final List? rooms; - Location? get coordinate { + LatLng? get coordinate { switch (id) { case 44: - return Location( - latitude: 48.24926355557732, - longitude: 11.633834370828435, + return const LatLng( + 48.24926355557732, + 11.633834370828435, ); case 46: - return Location(latitude: 48.2629811953867, longitude: 11.6668123); + return const LatLng(48.2629811953867, 11.6668123); case 47: - return Location( - latitude: 48.26250533403169, - longitude: 11.668024666454896, + return const LatLng( + 48.26250533403169, + 11.668024666454896, ); case 60: - return Location( - latitude: 48.14778663798231, - longitude: 11.56695764027295, + return const LatLng( + 48.14778663798231, + 11.56695764027295, ); case 97: - return Location( - latitude: 48.26696368721545, - longitude: 11.670222023419445, + return const LatLng( + 48.26696368721545, + 11.670222023419445, ); case 130: - return Location( - latitude: 48.39535098293569, - longitude: 11.724272313959853, + return const LatLng( + 48.39535098293569, + 11.724272313959853, ); default: return null; diff --git a/lib/placesComponent/viewModels/study_rooms_viewmodel.dart b/lib/placesComponent/viewModels/study_rooms_viewmodel.dart index a6ca4212..5c0a29eb 100644 --- a/lib/placesComponent/viewModels/study_rooms_viewmodel.dart +++ b/lib/placesComponent/viewModels/study_rooms_viewmodel.dart @@ -72,7 +72,11 @@ class StudyRoomsViewModel { widgetStudyRoom.add(selectedStudyRoom); } else { LocationService.getLastKnown().then( - (position) => _getClosestStudyRoomGroup(position, context), + (position) { + if (context.mounted) { + _getClosestStudyRoomGroup(position, context); + } + }, onError: (error) { if (value.$2.groups?.firstOrNull != null) { widgetStudyRoom.add(value.$2.groups!.first); diff --git a/lib/placesComponent/views/cafeterias/cafeteria_view.dart b/lib/placesComponent/views/cafeterias/cafeteria_view.dart index ec412f3c..d6ca73ae 100644 --- a/lib/placesComponent/views/cafeterias/cafeteria_view.dart +++ b/lib/placesComponent/views/cafeterias/cafeteria_view.dart @@ -1,4 +1,3 @@ -import 'package:campus_flutter/base/classes/location.dart' as location; import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/util/custom_back_button.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; @@ -45,9 +44,9 @@ class CafeteriaScaffold extends ConsumerWidget { IconButton( onPressed: () => showDirectionsDialog( cafeteria.name, - location.Location( - latitude: cafeteria.location.latitude, - longitude: cafeteria.location.longitude, + LatLng( + cafeteria.location.latitude, + cafeteria.location.longitude, ), context, ), diff --git a/lib/placesComponent/views/cafeterias/cafeterias_view.dart b/lib/placesComponent/views/cafeterias/cafeterias_view.dart index 413d1e70..6ddcb80b 100644 --- a/lib/placesComponent/views/cafeterias/cafeterias_view.dart +++ b/lib/placesComponent/views/cafeterias/cafeterias_view.dart @@ -3,7 +3,7 @@ import 'package:campus_flutter/base/util/custom_back_button.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/placesComponent/model/cafeterias/cafeteria.dart'; import 'package:campus_flutter/placesComponent/viewModels/cafeterias_viewmodel.dart'; diff --git a/lib/placesComponent/views/campuses/campus_view.dart b/lib/placesComponent/views/campuses/campus_view.dart index 67cfcec3..356a7703 100644 --- a/lib/placesComponent/views/campuses/campus_view.dart +++ b/lib/placesComponent/views/campuses/campus_view.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/enums/campus.dart'; import 'package:campus_flutter/base/util/icon_text.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/navigaTumComponent/viewModels/navigatum_campus_viewmodel.dart'; import 'package:campus_flutter/placesComponent/model/cafeterias/cafeteria.dart'; diff --git a/lib/placesComponent/views/studyGroups/study_room_group_scaffold.dart b/lib/placesComponent/views/studyGroups/study_room_group_scaffold.dart index 447e3bf0..739db139 100644 --- a/lib/placesComponent/views/studyGroups/study_room_group_scaffold.dart +++ b/lib/placesComponent/views/studyGroups/study_room_group_scaffold.dart @@ -1,4 +1,3 @@ -import 'package:campus_flutter/base/classes/location.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/base/util/custom_back_button.dart'; import 'package:campus_flutter/base/util/map_launcher.dart'; @@ -6,6 +5,7 @@ import 'package:campus_flutter/placesComponent/model/studyRooms/study_room_group import 'package:campus_flutter/placesComponent/views/studyGroups/study_room_group_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; class StudyRoomGroupScaffold extends ConsumerWidget { factory StudyRoomGroupScaffold(StudyRoomGroup? studyRoomGroup) { @@ -43,9 +43,9 @@ class StudyRoomGroupScaffold extends ConsumerWidget { IconButton( onPressed: () => showDirectionsDialog( studyRoomGroup!.name, - Location( - latitude: studyRoomGroup!.coordinate!.latitude, - longitude: studyRoomGroup!.coordinate!.longitude, + LatLng( + studyRoomGroup!.coordinate!.latitude, + studyRoomGroup!.coordinate!.longitude, ), context, ), diff --git a/lib/placesComponent/views/studyGroups/study_room_group_view.dart b/lib/placesComponent/views/studyGroups/study_room_group_view.dart index e4fd210e..bce6dabd 100644 --- a/lib/placesComponent/views/studyGroups/study_room_group_view.dart +++ b/lib/placesComponent/views/studyGroups/study_room_group_view.dart @@ -2,7 +2,7 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/last_updated_text.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room_group.dart'; diff --git a/lib/placesComponent/views/studyGroups/study_rooms_view.dart b/lib/placesComponent/views/studyGroups/study_rooms_view.dart index ee520360..beb3d604 100644 --- a/lib/placesComponent/views/studyGroups/study_rooms_view.dart +++ b/lib/placesComponent/views/studyGroups/study_rooms_view.dart @@ -3,7 +3,7 @@ import 'package:campus_flutter/base/util/custom_back_button.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/util/padded_divider.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:campus_flutter/placesComponent/model/studyRooms/study_room_group.dart'; import 'package:campus_flutter/placesComponent/viewModels/study_rooms_viewmodel.dart'; diff --git a/lib/searchComponent/viewModels/global_search_viewmodel.dart b/lib/searchComponent/viewModels/global_search_viewmodel.dart index 8b49c0d3..38dc993e 100644 --- a/lib/searchComponent/viewModels/global_search_viewmodel.dart +++ b/lib/searchComponent/viewModels/global_search_viewmodel.dart @@ -2,7 +2,7 @@ import 'package:campus_flutter/base/enums/credentials.dart'; import 'package:campus_flutter/base/enums/search_category.dart'; import 'package:campus_flutter/onboardingComponent/viewModels/onboarding_viewmodel.dart'; import 'package:campus_flutter/navigaTumComponent/viewModels/navigatum_search_viewmodel.dart'; -import 'package:campus_flutter/personSearchComponent/viewModel/person_search_viewmodel.dart'; +import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/person_search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/cafeteria_search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/calendar_search_viewmodel.dart'; import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/grades_search_viewmodel.dart'; diff --git a/lib/personSearchComponent/viewModel/person_search_viewmodel.dart b/lib/searchComponent/viewModels/searchableViewModels/person_search_viewmodel.dart similarity index 81% rename from lib/personSearchComponent/viewModel/person_search_viewmodel.dart rename to lib/searchComponent/viewModels/searchableViewModels/person_search_viewmodel.dart index fdf49c9e..9ce5703f 100644 --- a/lib/personSearchComponent/viewModel/person_search_viewmodel.dart +++ b/lib/searchComponent/viewModels/searchableViewModels/person_search_viewmodel.dart @@ -1,5 +1,5 @@ -import 'package:campus_flutter/personSearchComponent/model/person.dart'; -import 'package:campus_flutter/personSearchComponent/services/person_search_service.dart'; +import 'package:campus_flutter/personComponent/model/personSearch/person.dart'; +import 'package:campus_flutter/personComponent/services/person_search_service.dart'; import 'package:campus_flutter/searchComponent/protocols/search_viewmodel.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; diff --git a/lib/searchComponent/views/appWideSearch/resultViews/person_search_result_view.dart b/lib/searchComponent/views/appWideSearch/resultViews/person_search_result_view.dart index 4042892d..e812eead 100644 --- a/lib/searchComponent/views/appWideSearch/resultViews/person_search_result_view.dart +++ b/lib/searchComponent/views/appWideSearch/resultViews/person_search_result_view.dart @@ -1,6 +1,6 @@ import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/personSearchComponent/model/person.dart'; -import 'package:campus_flutter/personSearchComponent/viewModel/person_search_viewmodel.dart'; +import 'package:campus_flutter/personComponent/model/personSearch/person.dart'; +import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/person_search_viewmodel.dart'; import 'package:campus_flutter/base/enums/search_category.dart'; import 'package:campus_flutter/searchComponent/views/appWideSearch/search_result_card_view.dart'; import 'package:flutter/material.dart'; diff --git a/lib/searchComponent/views/personRoomSearch/search_view.dart b/lib/searchComponent/views/personRoomSearch/search_view.dart index 319633c1..37d1c35d 100644 --- a/lib/searchComponent/views/personRoomSearch/search_view.dart +++ b/lib/searchComponent/views/personRoomSearch/search_view.dart @@ -3,11 +3,11 @@ import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/util/custom_back_button.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/navigaTumComponent/model/navigatum_navigation_entity.dart'; import 'package:campus_flutter/navigaTumComponent/viewModels/navigatum_search_viewmodel.dart'; -import 'package:campus_flutter/personSearchComponent/model/person.dart'; -import 'package:campus_flutter/personSearchComponent/viewModel/person_search_viewmodel.dart'; +import 'package:campus_flutter/personComponent/model/personSearch/person.dart'; +import 'package:campus_flutter/searchComponent/viewModels/searchableViewModels/person_search_viewmodel.dart'; import 'package:campus_flutter/base/extensions/context.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/settingsComponent/views/appearance_settings_view.dart b/lib/settingsComponent/views/appearance_settings_view.dart index 8ce1f249..0c4ab3ae 100644 --- a/lib/settingsComponent/views/appearance_settings_view.dart +++ b/lib/settingsComponent/views/appearance_settings_view.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:campus_flutter/base/enums/appearance.dart'; import 'package:campus_flutter/base/enums/user_preference.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/calendarComponent/views/calendars_view.dart'; import 'package:campus_flutter/studiesComponent/viewModel/grade_viewmodel.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; diff --git a/lib/settingsComponent/views/contact_view.dart b/lib/settingsComponent/views/contact_view.dart index 078ad294..47b9903f 100644 --- a/lib/settingsComponent/views/contact_view.dart +++ b/lib/settingsComponent/views/contact_view.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:campus_flutter/base/util/hyperlink_text.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/settingsComponent/views/general_settings_view.dart b/lib/settingsComponent/views/general_settings_view.dart index 7de2657b..85e2006a 100644 --- a/lib/settingsComponent/views/general_settings_view.dart +++ b/lib/settingsComponent/views/general_settings_view.dart @@ -1,7 +1,7 @@ import 'package:campus_flutter/base/extensions/context.dart'; import 'package:campus_flutter/base/extensions/locale_fullname.dart'; import 'package:campus_flutter/base/routing/routes.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/studiesComponent/view/lectureDetail/lecture_details_view.dart b/lib/studiesComponent/view/lectureDetail/lecture_details_view.dart index 80bbf369..42fc6a97 100644 --- a/lib/studiesComponent/view/lectureDetail/lecture_details_view.dart +++ b/lib/studiesComponent/view/lectureDetail/lecture_details_view.dart @@ -5,7 +5,7 @@ import 'package:campus_flutter/base/util/last_updated_text.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/calendarComponent/model/calendar_event.dart'; import 'package:campus_flutter/calendarComponent/viewModels/calendar_viewmodel.dart'; -import 'package:campus_flutter/base/views/color_picker_view.dart'; +import 'package:campus_flutter/base/util/color_picker_view.dart'; import 'package:campus_flutter/studiesComponent/model/lecture.dart'; import 'package:campus_flutter/studiesComponent/model/lecture_details.dart'; import 'package:campus_flutter/studiesComponent/view/lectureDetail/basic_lecture_info_view.dart'; diff --git a/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart b/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart index 88acbb96..2f43a89e 100644 --- a/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart +++ b/lib/studiesComponent/view/lectureDetail/lecture_info_card_view.dart @@ -1,5 +1,5 @@ import 'package:campus_flutter/base/util/icon_text.dart'; -import 'package:campus_flutter/base/views/seperated_list.dart'; +import 'package:campus_flutter/base/util/seperated_list.dart'; import 'package:campus_flutter/homeComponent/view/widget/widget_frame_view.dart'; import 'package:flutter/material.dart'; diff --git a/pubspec.lock b/pubspec.lock index 20dbd1f6..61c75373 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1305,10 +1305,10 @@ packages: dependency: transitive description: name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" shelf_web_socket: dependency: transitive description: From ffb82e1078bea1d2b3717ce6fc3ee5eb672c9d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Mon, 9 Sep 2024 20:18:44 +0200 Subject: [PATCH 22/27] Fix Build Errors --- lib/base/extensions/latlng_to_json.dart | 13 +++++++++++++ lib/homeComponent/model/station.dart | 2 ++ lib/homeComponent/model/station.g.dart | 6 ++---- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 lib/base/extensions/latlng_to_json.dart diff --git a/lib/base/extensions/latlng_to_json.dart b/lib/base/extensions/latlng_to_json.dart new file mode 100644 index 00000000..5daf0858 --- /dev/null +++ b/lib/base/extensions/latlng_to_json.dart @@ -0,0 +1,13 @@ +import 'dart:convert'; + +import 'package:google_maps_flutter/google_maps_flutter.dart'; + +extension JsonString on LatLng { + static String? toJsonString(LatLng? latLng) { + if (latLng == null) { + return null; + } else { + return const JsonEncoder().convert(latLng.toJson()); + } + } +} diff --git a/lib/homeComponent/model/station.dart b/lib/homeComponent/model/station.dart index b824e5fb..92dd4ec5 100644 --- a/lib/homeComponent/model/station.dart +++ b/lib/homeComponent/model/station.dart @@ -1,4 +1,5 @@ import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:campus_flutter/base/extensions/latlng_to_json.dart'; import 'package:json_annotation/json_annotation.dart'; part 'station.g.dart'; @@ -9,6 +10,7 @@ part 'station.g.dart'; class Station { final String name; final String apiName; + @JsonKey(fromJson: LatLng.fromJson, toJson: JsonString.toJsonString) final LatLng? location; Station({required this.name, required this.apiName, this.location}); diff --git a/lib/homeComponent/model/station.g.dart b/lib/homeComponent/model/station.g.dart index 95ad9881..79efb821 100644 --- a/lib/homeComponent/model/station.g.dart +++ b/lib/homeComponent/model/station.g.dart @@ -9,13 +9,11 @@ part of 'station.dart'; Station _$StationFromJson(Map json) => Station( name: json['name'] as String, apiName: json['apiName'] as String, - location: json['location'] == null - ? null - : Location.fromJson(json['location'] as Map), + location: LatLng.fromJson(json['location']), ); Map _$StationToJson(Station instance) => { 'name': instance.name, 'apiName': instance.apiName, - 'location': instance.location, + 'location': JsonString.toJsonString(instance.location), }; From 40f1a8e96f98af449b4fa1c14bbd96b692103e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Mon, 9 Sep 2024 20:22:10 +0200 Subject: [PATCH 23/27] Bump Dependencies --- pubspec.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 61c75373..fb5682d3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -712,10 +712,10 @@ packages: dependency: transitive description: name: google_maps_flutter_platform_interface - sha256: "4f6930fd668bf5d40feb2695d5695dbc0c35e5542b557a34ad35be491686d2ba" + sha256: "8ba5daee8b5d2230fea17a7903047ce4dc45fb1f0726356a1d8eb541e30c7d05" url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.9.1" google_maps_flutter_web: dependency: transitive description: @@ -745,10 +745,10 @@ packages: description: path: "." ref: master - resolved-ref: c63c97840167512f6a5fa0877d25503cd539f138 + resolved-ref: e036378d975804b0e995a2d07c2aa0e52cfef910 url: "https://github.com/jakobkoerber/grpc-dart.git" source: git - version: "4.0.2" + version: "4.0.2-wip" home_widget: dependency: "direct main" description: From 9756d7ef026bf1968878f48e010b459527db02fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Tue, 10 Sep 2024 00:38:58 +0200 Subject: [PATCH 24/27] Fix Student Club Item in Dark Mode --- .../studentClub/student_club_item_view.dart | 20 ++++++++++++++----- .../student_club_search_result_view.dart | 20 ++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/lib/campusComponent/view/studentClub/student_club_item_view.dart b/lib/campusComponent/view/studentClub/student_club_item_view.dart index 99dea085..8fe445fc 100644 --- a/lib/campusComponent/view/studentClub/student_club_item_view.dart +++ b/lib/campusComponent/view/studentClub/student_club_item_view.dart @@ -35,12 +35,15 @@ class StudentClubItemView extends ConsumerWidget { if (studentClub.coverUrl.contains("svg")) Expanded( flex: 4, - child: SvgPicture.network( - studentClub.coverUrl, - fit: BoxFit.cover, - placeholderBuilder: (context) => Image.asset( - "assets/images/placeholders/student_club_placeholder.png", + child: Container( + color: Colors.white, + child: SvgPicture.network( + studentClub.coverUrl, fit: BoxFit.cover, + placeholderBuilder: (context) => Image.asset( + "assets/images/placeholders/student_club_placeholder.png", + fit: BoxFit.cover, + ), ), ), ), @@ -48,6 +51,13 @@ class StudentClubItemView extends ConsumerWidget { Expanded( flex: 4, child: CachedNetworkImage( + imageBuilder: (context, imageProvider) => Container( + color: Colors.white, + child: Image( + image: imageProvider, + fit: BoxFit.cover, + ), + ), imageUrl: studentClub.coverUrl, fit: BoxFit.cover, errorWidget: (context, _, __) => Image.asset( diff --git a/lib/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart b/lib/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart index b55337f1..44b71497 100644 --- a/lib/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart +++ b/lib/searchComponent/views/appWideSearch/resultViews/student_club_search_result_view.dart @@ -37,18 +37,28 @@ class StudentClubSearchResultView extends ConsumerWidget { borderRadius: const BorderRadius.all(Radius.circular(10)), child: () { if (imageUrl.contains("svg")) { - return SvgPicture.network( + return Container( width: 80, height: 50, - imageUrl, - fit: BoxFit.cover, - placeholderBuilder: (context) => Image.asset( - "assets/images/placeholders/student_club_placeholder.png", + color: Colors.white, + child: SvgPicture.network( + imageUrl, fit: BoxFit.cover, + placeholderBuilder: (context) => Image.asset( + "assets/images/placeholders/student_club_placeholder.png", + fit: BoxFit.cover, + ), ), ); } else { return CachedNetworkImage( + imageBuilder: (context, imageProvider) => Container( + color: Colors.white, + child: Image( + image: imageProvider, + fit: BoxFit.cover, + ), + ), width: 80, height: 50, imageUrl: imageUrl, From 9a30f5b87ac64987733369979b01466ee45f6422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Wed, 11 Sep 2024 00:33:37 +0200 Subject: [PATCH 25/27] Bump Dependencies, Fix Build Error --- ios/Podfile.lock | 40 +++--- lib/base/networking/cache/cache_entry.g.dart | 127 +++++++++++-------- pubspec.lock | 84 ++++++------ pubspec.yaml | 2 +- 4 files changed, 139 insertions(+), 114 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 682798e8..5ce12b9f 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -9,26 +9,26 @@ PODS: - Firebase/RemoteConfig (11.0.0): - Firebase/CoreOnly - FirebaseRemoteConfig (~> 11.0.0) - - firebase_core (3.4.0): + - firebase_core (3.4.1): - Firebase/CoreOnly (= 11.0.0) - Flutter - - firebase_crashlytics (4.1.0): + - firebase_crashlytics (4.1.1): - Firebase/Crashlytics (= 11.0.0) - firebase_core - Flutter - - firebase_remote_config (5.1.0): + - firebase_remote_config (5.1.1): - Firebase/RemoteConfig (= 11.0.0) - firebase_core - Flutter - - FirebaseABTesting (11.1.0): + - FirebaseABTesting (11.2.0): - FirebaseCore (~> 11.0) - FirebaseCore (11.0.0): - FirebaseCoreInternal (~> 11.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/Logger (~> 8.0) - - FirebaseCoreExtension (11.1.0): + - FirebaseCoreExtension (11.2.0): - FirebaseCore (~> 11.0) - - FirebaseCoreInternal (11.1.0): + - FirebaseCoreInternal (11.2.0): - "GoogleUtilities/NSData+zlib (~> 8.0)" - FirebaseCrashlytics (11.0.0): - FirebaseCore (~> 11.0) @@ -39,7 +39,7 @@ PODS: - GoogleUtilities/Environment (~> 8.0) - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - FirebaseInstallations (11.1.0): + - FirebaseInstallations (11.2.0): - FirebaseCore (~> 11.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) @@ -52,8 +52,8 @@ PODS: - FirebaseSharedSwift (~> 11.0) - GoogleUtilities/Environment (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - - FirebaseRemoteConfigInterop (11.1.0) - - FirebaseSessions (11.1.0): + - FirebaseRemoteConfigInterop (11.2.0) + - FirebaseSessions (11.2.0): - FirebaseCore (~> 11.0) - FirebaseCoreExtension (~> 11.0) - FirebaseInstallations (~> 11.0) @@ -62,7 +62,7 @@ PODS: - GoogleUtilities/UserDefaults (~> 8.0) - nanopb (~> 3.30910.0) - PromisesSwift (~> 2.1) - - FirebaseSharedSwift (11.1.0) + - FirebaseSharedSwift (11.2.0) - Flutter (1.0.0) - flutter_native_splash (0.0.1): - Flutter @@ -235,19 +235,19 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d Firebase: 9f574c08c2396885b5e7e100ed4293d956218af9 - firebase_core: ceec591a66629daaee82d3321551692c4a871493 - firebase_crashlytics: e4f04180f443d5a8b56fbc0685bdbd7d90dd26f0 - firebase_remote_config: 2347e1cd52216f4b07f421068fb8dad42cca2803 - FirebaseABTesting: c2e22c3aab99afa81d0561708b2c1c356c556976 + firebase_core: ba84e940cf5cbbc601095f86556560937419195c + firebase_crashlytics: 4111f8198b78c99471c955af488cecd8224967e6 + firebase_remote_config: fd0d891a89fde724371e60300cf054a085664cba + FirebaseABTesting: 2104d957ce33888a3d6f3bde298cdee376dde8f1 FirebaseCore: 3cf438f431f18c12cdf2aaf64434648b63f7e383 - FirebaseCoreExtension: aa5c9779c2d0d39d83f1ceb3fdbafe80c4feecfa - FirebaseCoreInternal: adefedc9a88dbe393c4884640a73ec9e8e790f8c + FirebaseCoreExtension: cda74ddfb001224bd8fd1d6e74698b4ed07803de + FirebaseCoreInternal: 0c569513412da9f3b31bd0b340013bbee8f295c5 FirebaseCrashlytics: 745d8f0221fe49c62865391d1bf56f5a12eeec0b - FirebaseInstallations: d0a8fea5a6fa91abc661591cf57c0f0d70863e57 + FirebaseInstallations: 771177d89d6c451dc6e50085ec82e2fc77ed0a4a FirebaseRemoteConfig: fe8b7e6d6770fefbde27b0cac3f3deffba6e7326 - FirebaseRemoteConfigInterop: abf8b1bbc0bf1b84abd22b66746926410bf91a87 - FirebaseSessions: 78f137e68dc01ca71606169ba4ac73b98c13752a - FirebaseSharedSwift: 260a35e08943ec810d820a70bc0359136351d0c5 + FirebaseRemoteConfigInterop: 477b26fdeb8fb5fbaf22fa9db5343b42289dc7db + FirebaseSessions: adcec8b72d0066a385e3affcd1bcb1ebb3908ce6 + FirebaseSharedSwift: 7a0d78d155ede78407f0fdc89fbc914014c7c540 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 diff --git a/lib/base/networking/cache/cache_entry.g.dart b/lib/base/networking/cache/cache_entry.g.dart index 43ae0da7..1d352c3d 100644 --- a/lib/base/networking/cache/cache_entry.g.dart +++ b/lib/base/networking/cache/cache_entry.g.dart @@ -339,57 +339,6 @@ typedef $$CacheEntryTableUpdateCompanionBuilder = CacheEntryCompanion Function({ Value rowid, }); -class $$CacheEntryTableTableManager extends RootTableManager< - _$CacheDatabase, - $CacheEntryTable, - CacheEntryData, - $$CacheEntryTableFilterComposer, - $$CacheEntryTableOrderingComposer, - $$CacheEntryTableCreateCompanionBuilder, - $$CacheEntryTableUpdateCompanionBuilder> { - $$CacheEntryTableTableManager(_$CacheDatabase db, $CacheEntryTable table) - : super(TableManagerState( - db: db, - table: table, - filteringComposer: - $$CacheEntryTableFilterComposer(ComposerState(db, table)), - orderingComposer: - $$CacheEntryTableOrderingComposer(ComposerState(db, table)), - updateCompanionCallback: ({ - Value id = const Value.absent(), - Value url = const Value.absent(), - Value validUntil = const Value.absent(), - Value saved = const Value.absent(), - Value body = const Value.absent(), - Value rowid = const Value.absent(), - }) => - CacheEntryCompanion( - id: id, - url: url, - validUntil: validUntil, - saved: saved, - body: body, - rowid: rowid, - ), - createCompanionCallback: ({ - required int id, - required String url, - required DateTime validUntil, - required DateTime saved, - required String body, - Value rowid = const Value.absent(), - }) => - CacheEntryCompanion.insert( - id: id, - url: url, - validUntil: validUntil, - saved: saved, - body: body, - rowid: rowid, - ), - )); -} - class $$CacheEntryTableFilterComposer extends FilterComposer<_$CacheDatabase, $CacheEntryTable> { $$CacheEntryTableFilterComposer(super.$state); @@ -448,6 +397,82 @@ class $$CacheEntryTableOrderingComposer ColumnOrderings(column, joinBuilders: joinBuilders)); } +class $$CacheEntryTableTableManager extends RootTableManager< + _$CacheDatabase, + $CacheEntryTable, + CacheEntryData, + $$CacheEntryTableFilterComposer, + $$CacheEntryTableOrderingComposer, + $$CacheEntryTableCreateCompanionBuilder, + $$CacheEntryTableUpdateCompanionBuilder, + ( + CacheEntryData, + BaseReferences<_$CacheDatabase, $CacheEntryTable, CacheEntryData> + ), + CacheEntryData, + PrefetchHooks Function()> { + $$CacheEntryTableTableManager(_$CacheDatabase db, $CacheEntryTable table) + : super(TableManagerState( + db: db, + table: table, + filteringComposer: + $$CacheEntryTableFilterComposer(ComposerState(db, table)), + orderingComposer: + $$CacheEntryTableOrderingComposer(ComposerState(db, table)), + updateCompanionCallback: ({ + Value id = const Value.absent(), + Value url = const Value.absent(), + Value validUntil = const Value.absent(), + Value saved = const Value.absent(), + Value body = const Value.absent(), + Value rowid = const Value.absent(), + }) => + CacheEntryCompanion( + id: id, + url: url, + validUntil: validUntil, + saved: saved, + body: body, + rowid: rowid, + ), + createCompanionCallback: ({ + required int id, + required String url, + required DateTime validUntil, + required DateTime saved, + required String body, + Value rowid = const Value.absent(), + }) => + CacheEntryCompanion.insert( + id: id, + url: url, + validUntil: validUntil, + saved: saved, + body: body, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map((e) => (e.readTable(table), BaseReferences(db, table, e))) + .toList(), + prefetchHooksCallback: null, + )); +} + +typedef $$CacheEntryTableProcessedTableManager = ProcessedTableManager< + _$CacheDatabase, + $CacheEntryTable, + CacheEntryData, + $$CacheEntryTableFilterComposer, + $$CacheEntryTableOrderingComposer, + $$CacheEntryTableCreateCompanionBuilder, + $$CacheEntryTableUpdateCompanionBuilder, + ( + CacheEntryData, + BaseReferences<_$CacheDatabase, $CacheEntryTable, CacheEntryData> + ), + CacheEntryData, + PrefetchHooks Function()>; + class $CacheDatabaseManager { final _$CacheDatabase _db; $CacheDatabaseManager(this._db); diff --git a/pubspec.lock b/pubspec.lock index fb5682d3..793bb53c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "9371d13b8ee442e3bfc08a24e3a1b3742c839abbfaf5eef11b79c4b862c89bf7" + sha256: ddc6f775260b89176d329dee26f88b9469ef46aa3228ff6a0b91caf2b2989692 url: "https://pub.dev" source: hosted - version: "1.3.41" + version: "1.3.42" _macros: dependency: transitive description: dart @@ -170,10 +170,10 @@ packages: dependency: "direct main" description: name: cached_network_image - sha256: "4a5d8d2c728b0f3d0245f69f921d7be90cae4c2fd5288f773088672c0893f819" + sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" url: "https://pub.dev" source: hosted - version: "3.4.0" + version: "3.4.1" cached_network_image_platform_interface: dependency: transitive description: @@ -186,10 +186,10 @@ packages: dependency: transitive description: name: cached_network_image_web - sha256: "6322dde7a5ad92202e64df659241104a43db20ed594c41ca18de1014598d7996" + sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" characters: dependency: transitive description: @@ -282,10 +282,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" url: "https://pub.dev" source: hosted - version: "2.3.6" + version: "2.3.7" device_info_plus: dependency: "direct main" description: @@ -322,18 +322,18 @@ packages: dependency: "direct main" description: name: drift - sha256: "4e0ffee40d23f0b809e6cff1ad202886f51d629649073ed42d9cd1d194ea943e" + sha256: "9eec745294f67e7ba9b5e2df1303c758ca2fd54dda268752ad47dda896e392bc" url: "https://pub.dev" source: hosted - version: "2.19.1+1" + version: "2.20.1" drift_dev: dependency: "direct dev" description: name: drift_dev - sha256: ac7647c6cedca99724ca300cff9181f6dd799428f8ed71f94159ed0528eaec26 + sha256: "2db55faba578a2068ea69df17114bef0fb267c19d60671d7dc826937e36abe79" url: "https://pub.dev" source: hosted - version: "2.19.1" + version: "2.20.2" easy_localization: dependency: "direct main" description: @@ -378,10 +378,10 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "06537da27db981947fa535bb91ca120b4e9cb59cb87278dbdde718558cafc9ff" + sha256: "40921de9795fbf5887ed5c0adfdf4972d5a8d7ae7e1b2bb98dea39bc02626a88" url: "https://pub.dev" source: hosted - version: "3.4.0" + version: "3.4.1" firebase_core_platform_interface: dependency: transitive description: @@ -394,50 +394,50 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: "362e52457ed2b7b180964769c1e04d1e0ea0259fdf7025fdfedd019d4ae2bd88" + sha256: f4ee170441ca141c5f9ee5ad8737daba3ee9c8e7efb6902aee90b4fbd178ce25 url: "https://pub.dev" source: hosted - version: "2.17.5" + version: "2.18.0" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: "4c9872020c0d97a161362ee6af7000cfdb8666234ddc290a15252ad379bb235a" + sha256: c4fdbb14ba6f36794f89dc27fb5c759c9cc67ecbaeb079edc4dba515bbf9f555 url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "4.1.1" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: ede8a199ff03378857d3c8cbb7fa58d37c27bb5a6b75faf8415ff6925dcaae2a + sha256: "891d6f7ba4b93672d0e1265f27b6a9dccd56ba2cc30ce6496586b32d1d8770ac" url: "https://pub.dev" source: hosted - version: "3.6.41" + version: "3.6.42" firebase_remote_config: dependency: "direct main" description: name: firebase_remote_config - sha256: b5c23fb7f5b8fd2338f512587a8d2714b5b81dc02508a1c16163c51c1aa41991 + sha256: d17f91fc2e845353de8c5400266911571d3bbf573f164533cc7906d17bf20ad3 url: "https://pub.dev" source: hosted - version: "5.1.0" + version: "5.1.1" firebase_remote_config_platform_interface: dependency: transitive description: name: firebase_remote_config_platform_interface - sha256: "127ebc8b7c905d211396cab3b0984e4436c6350400805d196607043b8984d09c" + sha256: "92ea98b2d928d70f2ba27f2d635bd354ad608641d9a9f3719e2454560fa82b10" url: "https://pub.dev" source: hosted - version: "1.4.41" + version: "1.4.42" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web - sha256: "29dbff195c6225f957af541d325426f1697710ac36d169431c95bc92d985f4d2" + sha256: "706b9a52a7f05bd2f24e49b05297cba90499e5db1a2b42a5c92bfdcc43c1d238" url: "https://pub.dev" source: hosted - version: "1.6.13" + version: "1.7.0" fixnum: dependency: transitive description: @@ -600,10 +600,10 @@ packages: dependency: "direct main" description: name: geolocator - sha256: "149876cc5207a0f5daf4fdd3bfcf0a0f27258b3fe95108fa084f527ad0568f1b" + sha256: "0ec58b731776bc43097fcf751f79681b6a8f6d3bc737c94779fe9f1ad73c1a81" url: "https://pub.dev" source: hosted - version: "12.0.0" + version: "13.0.1" geolocator_android: dependency: transitive description: @@ -632,10 +632,10 @@ packages: dependency: transitive description: name: geolocator_web - sha256: "7a22f400d831f924a89d931ba126a10e6b8b437f31e6b9311320435f3e1571bd" + sha256: "2ed69328e05cd94e7eb48bb0535f5fc0c0c44d1c4fa1e9737267484d05c29b5e" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.1.1" geolocator_windows: dependency: transitive description: @@ -1089,10 +1089,10 @@ packages: dependency: transitive description: name: permission_handler_platform_interface - sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea + sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.2.3" permission_handler_windows: dependency: transitive description: @@ -1398,10 +1398,10 @@ packages: dependency: "direct main" description: name: sqlite3 - sha256: fde692580bee3379374af1f624eb3e113ab2865ecb161dbe2d8ac2de9735dbdb + sha256: "45f168ae2213201b54e09429ed0c593dc2c88c924a1488d6f9c523a255d567cb" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.6" sqlite3_flutter_libs: dependency: "direct main" description: @@ -1414,10 +1414,10 @@ packages: dependency: transitive description: name: sqlparser - sha256: "3be52b4968fc2f098ba735863404756d2fe3ea0729cf006a5b5612618f74ca04" + sha256: "249377442a813888f387827914238f28ee99385cff3b1ab3b219d5c25ca40b38" url: "https://pub.dev" source: hosted - version: "0.37.1" + version: "0.38.0" stack_trace: dependency: transitive description: @@ -1462,10 +1462,10 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: e4b26cd68204e1caaf0a02c5092b8bb3227e331deadbdb1e4a64ea4cfa8dc008 + sha256: "37d954997e73149280cd218124ffa3210b5e09711f1ec4fc0103faa1944e885c" url: "https://pub.dev" source: hosted - version: "26.2.13" + version: "26.2.14" syncfusion_flutter_charts: dependency: "direct main" description: @@ -1488,10 +1488,10 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: "7989608f897edb61ea156d743ca31024eba688679a85f633f8203d17eafab83c" + sha256: "9d0e1db2f49cef3fde28c5a42c7ef9b64fc9a49c52557eb6961cd41af3cf8adc" url: "https://pub.dev" source: hosted - version: "26.2.13" + version: "26.2.14" synchronized: dependency: transitive description: @@ -1736,10 +1736,10 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.0.0" web_socket: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f921be78..0672e999 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -55,7 +55,7 @@ dependencies: # helpers device_info_plus: ^10.0.1 flutter_secure_storage: ^9.0.0 - geolocator: ^12.0.0 + geolocator: ^13.0.1 package_info_plus: ^8.0.0 path_provider: ^2.0.15 path: ^1.9.0 From 7262cf9876cd2870eeac0b29ce1351f94715c3c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Wed, 18 Sep 2024 22:22:38 +0200 Subject: [PATCH 26/27] Incorporate Feedback from Digital Transformation --- assets/translations/de.json | 2 +- assets/translations/en.json | 2 +- ios/Podfile.lock | 12 ++-- lib/campusComponent/model/student_club.dart | 6 ++ .../model/student_club_collection.dart | 6 ++ .../screen/student_clubs_screen.dart | 3 +- .../studentClub/student_club_item_view.dart | 3 +- .../studentClub/student_club_widget_view.dart | 4 +- .../viewmodel/student_club_viewmodel.dart | 1 + pubspec.lock | 68 +++++++++---------- pubspec.yaml | 19 ++---- 11 files changed, 65 insertions(+), 61 deletions(-) create mode 100644 lib/campusComponent/model/student_club.dart create mode 100644 lib/campusComponent/model/student_club_collection.dart diff --git a/assets/translations/de.json b/assets/translations/de.json index 5581c76d..4cffb277 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -225,5 +225,5 @@ "campus": "Campus", "studies": "Studium", "suggested": "Interessante {}", - "viewAll": "Alle ansehen" + "all": "Alle" } diff --git a/assets/translations/en.json b/assets/translations/en.json index 935c0427..4af6a238 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -225,5 +225,5 @@ "campus": "Campus", "studies": "Studies", "suggested": "Suggested {}", - "viewAll": "View All" + "all": "All" } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 87cc37e8..0b064d6d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -9,14 +9,14 @@ PODS: - Firebase/RemoteConfig (11.0.0): - Firebase/CoreOnly - FirebaseRemoteConfig (~> 11.0.0) - - firebase_core (3.4.1): + - firebase_core (3.5.0): - Firebase/CoreOnly (= 11.0.0) - Flutter - - firebase_crashlytics (4.1.1): + - firebase_crashlytics (4.1.2): - Firebase/Crashlytics (= 11.0.0) - firebase_core - Flutter - - firebase_remote_config (5.1.1): + - firebase_remote_config (5.1.2): - Firebase/RemoteConfig (= 11.0.0) - firebase_core - Flutter @@ -235,9 +235,9 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d Firebase: 9f574c08c2396885b5e7e100ed4293d956218af9 - firebase_core: ba84e940cf5cbbc601095f86556560937419195c - firebase_crashlytics: 4111f8198b78c99471c955af488cecd8224967e6 - firebase_remote_config: fd0d891a89fde724371e60300cf054a085664cba + firebase_core: 2ec6b789859c7c24766344ec71fdf78639402d56 + firebase_crashlytics: 60630a0f91ee432275fa1660fd8593079761448a + firebase_remote_config: e9540adfc076899bf326f934a9dc722dd7795310 FirebaseABTesting: 2104d957ce33888a3d6f3bde298cdee376dde8f1 FirebaseCore: 3cf438f431f18c12cdf2aaf64434648b63f7e383 FirebaseCoreExtension: cda74ddfb001224bd8fd1d6e74698b4ed07803de diff --git a/lib/campusComponent/model/student_club.dart b/lib/campusComponent/model/student_club.dart new file mode 100644 index 00000000..15576062 --- /dev/null +++ b/lib/campusComponent/model/student_club.dart @@ -0,0 +1,6 @@ +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; +import 'package:html/parser.dart'; + +extension ParsedStudentClub on StudentClub { + String get parsedName => parseFragment(name).text ?? name; +} \ No newline at end of file diff --git a/lib/campusComponent/model/student_club_collection.dart b/lib/campusComponent/model/student_club_collection.dart new file mode 100644 index 00000000..7a5cd8c7 --- /dev/null +++ b/lib/campusComponent/model/student_club_collection.dart @@ -0,0 +1,6 @@ +import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; +import 'package:html/parser.dart'; + +extension ParsedStudentClubCollection on StudentClubCollection { + String get parsedTitle => parseFragment(title).text ?? title; +} \ No newline at end of file diff --git a/lib/campusComponent/screen/student_clubs_screen.dart b/lib/campusComponent/screen/student_clubs_screen.dart index 010feb2e..b853581a 100644 --- a/lib/campusComponent/screen/student_clubs_screen.dart +++ b/lib/campusComponent/screen/student_clubs_screen.dart @@ -2,6 +2,7 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; +import 'package:campus_flutter/campusComponent/model/student_club_collection.dart'; import 'package:campus_flutter/campusComponent/view/studentClub/student_club_item_view.dart'; import 'package:campus_flutter/campusComponent/viewmodel/student_club_viewmodel.dart'; import 'package:flutter/material.dart'; @@ -25,7 +26,7 @@ class StudentClubsScreen extends ConsumerWidget { tabs: [ for (var collection in snapshot.data ?? []) - Tab(text: collection.title), + Tab(text: collection.parsedTitle), ], ), ), diff --git a/lib/campusComponent/view/studentClub/student_club_item_view.dart b/lib/campusComponent/view/studentClub/student_club_item_view.dart index 8fe445fc..bdbec597 100644 --- a/lib/campusComponent/view/studentClub/student_club_item_view.dart +++ b/lib/campusComponent/view/studentClub/student_club_item_view.dart @@ -1,6 +1,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; import 'package:campus_flutter/base/util/url_launcher.dart'; +import 'package:campus_flutter/campusComponent/model/student_club.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; @@ -72,7 +73,7 @@ class StudentClubItemView extends ConsumerWidget { child: Padding( padding: const EdgeInsets.all(5), child: Text( - studentClub.name, + studentClub.parsedName, textAlign: TextAlign.center, maxLines: 2, style: const TextStyle(fontWeight: FontWeight.w500), diff --git a/lib/campusComponent/view/studentClub/student_club_widget_view.dart b/lib/campusComponent/view/studentClub/student_club_widget_view.dart index 0d96ade2..97a2fb4e 100644 --- a/lib/campusComponent/view/studentClub/student_club_widget_view.dart +++ b/lib/campusComponent/view/studentClub/student_club_widget_view.dart @@ -32,7 +32,7 @@ class _StudentClubWidgetViewState extends ConsumerState { titleWidget: Row( children: [ Text( - context.tr("suggested", args: ["Student Clubs"]), + "Student Clubs", style: Theme.of(context).textTheme.titleMedium, maxLines: 1, overflow: TextOverflow.ellipsis, @@ -40,7 +40,7 @@ class _StudentClubWidgetViewState extends ConsumerState { const Spacer(), InkWell( child: Text( - context.tr("viewAll"), + context.tr("all"), style: Theme.of(context).textTheme.titleMedium, maxLines: 1, overflow: TextOverflow.ellipsis, diff --git a/lib/campusComponent/viewmodel/student_club_viewmodel.dart b/lib/campusComponent/viewmodel/student_club_viewmodel.dart index 6058845f..78218d1b 100644 --- a/lib/campusComponent/viewmodel/student_club_viewmodel.dart +++ b/lib/campusComponent/viewmodel/student_club_viewmodel.dart @@ -16,6 +16,7 @@ class StudentClubViewModel { (value) { collections.add(value.$2); final studentClubs = value.$2.expand((e) => e.clubs).toList(); + studentClubs.removeWhere((studentClub) => studentClub.coverUrl.isEmpty); studentClubs.shuffle(); suggestions.add(studentClubs.take(5).toList()); }, diff --git a/pubspec.lock b/pubspec.lock index a1c411b8..693bcb38 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: ddc6f775260b89176d329dee26f88b9469ef46aa3228ff6a0b91caf2b2989692 + sha256: "5fdcea390499dd26c808a3c662df5f4208d6bbc0643072eee94f1476249e2818" url: "https://pub.dev" source: hosted - version: "1.3.42" + version: "1.3.43" _macros: dependency: transitive description: dart @@ -378,66 +378,66 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "40921de9795fbf5887ed5c0adfdf4972d5a8d7ae7e1b2bb98dea39bc02626a88" + sha256: c7de9354eb2cd8bfe8059e1112174c9a58beda7051807207306bc48283277cfb url: "https://pub.dev" source: hosted - version: "3.4.1" + version: "3.5.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: f7d7180c7f99babd4b4c517754d41a09a4943a0f7a69b65c894ca5c68ba66315 + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 url: "https://pub.dev" source: hosted - version: "5.2.1" + version: "5.3.0" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: f4ee170441ca141c5f9ee5ad8737daba3ee9c8e7efb6902aee90b4fbd178ce25 + sha256: f967a7138f5d2ffb1ce15950e2a382924239eaa521150a8f144af34e68b3b3e5 url: "https://pub.dev" source: hosted - version: "2.18.0" + version: "2.18.1" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: c4fdbb14ba6f36794f89dc27fb5c759c9cc67ecbaeb079edc4dba515bbf9f555 + sha256: "7821f9d8373b91f2a5ca8214226891d5870e196a7376f66350f65204387e9c15" url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.1.2" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "891d6f7ba4b93672d0e1265f27b6a9dccd56ba2cc30ce6496586b32d1d8770ac" + sha256: "8ed539fd9e9b6c07905f9f44c5f6d4785ac841a5a8195bd35586c8b1d54ec26d" url: "https://pub.dev" source: hosted - version: "3.6.42" + version: "3.6.43" firebase_remote_config: dependency: "direct main" description: name: firebase_remote_config - sha256: d17f91fc2e845353de8c5400266911571d3bbf573f164533cc7906d17bf20ad3 + sha256: "0c13662ce9cb8a5b78ae67d3d775bc2690bffb0fd040f6735f2c9d13cf989693" url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "5.1.2" firebase_remote_config_platform_interface: dependency: transitive description: name: firebase_remote_config_platform_interface - sha256: "92ea98b2d928d70f2ba27f2d635bd354ad608641d9a9f3719e2454560fa82b10" + sha256: "1748d672c9d9f460b11ec17e10c6afd844a95e26c83ed8cb99c3227511f5038e" url: "https://pub.dev" source: hosted - version: "1.4.42" + version: "1.4.43" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web - sha256: "706b9a52a7f05bd2f24e49b05297cba90499e5db1a2b42a5c92bfdcc43c1d238" + sha256: "2d036ed39a7cbb5e42a4b019c62c1a05ea7327142751553a0c3fa915f5a567db" url: "https://pub.dev" source: hosted - version: "1.7.0" + version: "1.7.1" fixnum: dependency: transitive description: @@ -758,7 +758,7 @@ packages: source: hosted version: "0.7.0" html: - dependency: transitive + dependency: "direct main" description: name: html sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" @@ -1462,36 +1462,34 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: "37d954997e73149280cd218124ffa3210b5e09711f1ec4fc0103faa1944e885c" + sha256: c501e463e69ed6f69323ead6b3b47873e5f25d00ec481fe2429f9ebbac92271b url: "https://pub.dev" source: hosted - version: "26.2.14" + version: "27.1.48" syncfusion_flutter_charts: dependency: "direct main" description: - path: "packages/syncfusion_flutter_charts" - ref: master - resolved-ref: a4364d6ba335b127d652a4de51b60cd026c53f15 - url: "https://github.com/jakobkoerber/flutter-widgets.git" - source: git - version: "25.2.5" + name: syncfusion_flutter_charts + sha256: cdc207291ad0caf34cb9e20caa8938ff65f67a413b3a86a14d3a7b341a772100 + url: "https://pub.dev" + source: hosted + version: "27.1.48" syncfusion_flutter_core: dependency: "direct main" description: - path: "packages/syncfusion_flutter_core" - ref: master - resolved-ref: a4364d6ba335b127d652a4de51b60cd026c53f15 - url: "https://github.com/jakobkoerber/flutter-widgets.git" - source: git - version: "25.2.7" + name: syncfusion_flutter_core + sha256: "4347f4d2f5d89461df2c53e6fbf53aef38c7f05ed79b0760d935fb1ec836213b" + url: "https://pub.dev" + source: hosted + version: "27.1.48" syncfusion_flutter_datepicker: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: "9d0e1db2f49cef3fde28c5a42c7ef9b64fc9a49c52557eb6961cd41af3cf8adc" + sha256: "239331a866e57794925d29f9a68af0f52b2d1942001588e11f49729de2c670b0" url: "https://pub.dev" source: hosted - version: "26.2.14" + version: "27.1.48" synchronized: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 0672e999..0428eb68 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -38,10 +38,10 @@ dependencies: auto_size_text: ^3.0.0 quick_actions: ^1.0.7 flutter_native_splash: ^2.2.19 - syncfusion_flutter_core: ^26.1.35 - syncfusion_flutter_calendar: ^26.1.35 - syncfusion_flutter_charts: ^26.1.35 - syncfusion_flutter_datepicker: ^26.1.35 + syncfusion_flutter_core: ^27.1.48 + syncfusion_flutter_calendar: ^27.1.48 + syncfusion_flutter_charts: ^27.1.48 + syncfusion_flutter_datepicker: ^27.1.48 google_maps_flutter: ^2.5.3 video_player: ^2.6.1 barcode_widget: ^2.0.4 @@ -65,6 +65,7 @@ dependencies: collection: ^1.18.0 shared_preferences: ^2.1.2 map_launcher: ^3.0.1 + html: ^0.15.4 # firebase firebase_crashlytics: ^4.0.1 @@ -89,16 +90,6 @@ dependency_overrides: git: url: https://github.com/jakobkoerber/flutter_linkify ref: master - syncfusion_flutter_core: - git: - url: https://github.com/jakobkoerber/flutter-widgets.git - path: packages/syncfusion_flutter_core - ref: master - syncfusion_flutter_charts: - git: - url: https://github.com/jakobkoerber/flutter-widgets.git - path: packages/syncfusion_flutter_charts - ref: master dev_dependencies: # code generation From 0227661cbe310e9887d218813b0965b584593f95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20K=C3=B6rber?= <56073945+jakobkoerber@users.noreply.github.com> Date: Thu, 19 Sep 2024 11:43:28 +0200 Subject: [PATCH 27/27] Add Screens for News and Movies, Optimize for Tablet --- lib/base/enums/device.dart | 5 ++ lib/base/routing/router.dart | 10 +++ lib/base/routing/routes.dart | 2 + lib/base/services/device_type_service.dart | 12 +++ lib/campusComponent/model/student_club.dart | 2 +- .../model/student_club_collection.dart | 2 +- lib/campusComponent/screen/movie_screen.dart | 77 ++++++++++++++++ lib/campusComponent/screen/news_screen.dart | 88 +++++++++++++++++++ .../screen/student_clubs_screen.dart | 34 +++++-- .../view/movie/movie_card_view.dart | 42 ++++----- .../view/movie/movies_widget_view.dart | 26 +++++- .../view/news/news_card_view.dart | 5 +- .../view/news/news_widget_view.dart | 21 ++++- .../viewmodel/movies_viewmodel.dart | 3 +- .../viewmodel/news_viewmodel.dart | 17 +++- 15 files changed, 313 insertions(+), 33 deletions(-) create mode 100644 lib/base/enums/device.dart create mode 100644 lib/base/services/device_type_service.dart create mode 100644 lib/campusComponent/screen/movie_screen.dart create mode 100644 lib/campusComponent/screen/news_screen.dart diff --git a/lib/base/enums/device.dart b/lib/base/enums/device.dart new file mode 100644 index 00000000..415168ba --- /dev/null +++ b/lib/base/enums/device.dart @@ -0,0 +1,5 @@ +enum Device { + phone, + portraitTablet, + landscapeTablet; +} diff --git a/lib/base/routing/router.dart b/lib/base/routing/router.dart index 4661e346..172eac3d 100644 --- a/lib/base/routing/router.dart +++ b/lib/base/routing/router.dart @@ -6,6 +6,8 @@ import 'package:campus_flutter/calendarComponent/model/calendar_event.dart'; import 'package:campus_flutter/calendarComponent/views/calendars_view.dart'; import 'package:campus_flutter/calendarComponent/views/event_creation_view.dart'; import 'package:campus_flutter/campusComponent/screen/campus_screen.dart'; +import 'package:campus_flutter/campusComponent/screen/movie_screen.dart'; +import 'package:campus_flutter/campusComponent/screen/news_screen.dart'; import 'package:campus_flutter/campusComponent/screen/student_clubs_screen.dart'; import 'package:campus_flutter/homeComponent/view/departure/departures_details_view.dart'; import 'package:campus_flutter/feedbackComponent/views/feedback_form_view.dart'; @@ -168,6 +170,14 @@ final _router = GoRouter( path: studentClubs, builder: (context, state) => const StudentClubsScreen(), ), + GoRoute( + path: news, + builder: (context, state) => const NewsScreen(), + ), + GoRoute( + path: movies, + builder: (context, state) => const MovieScreen(), + ), GoRoute( path: studyRooms, builder: (context, state) => const StudyRoomsScaffold(), diff --git a/lib/base/routing/routes.dart b/lib/base/routing/routes.dart index 795438ec..94964b7d 100644 --- a/lib/base/routing/routes.dart +++ b/lib/base/routing/routes.dart @@ -22,6 +22,8 @@ const eventCreation = "$calendar/eventCreation"; /// Campus tab const campus = "/campus"; const studentClubs = "/studentClubs"; +const news = "/news"; +const movies = "/movies"; /// Places tab const places = "/places"; diff --git a/lib/base/services/device_type_service.dart b/lib/base/services/device_type_service.dart new file mode 100644 index 00000000..d1282224 --- /dev/null +++ b/lib/base/services/device_type_service.dart @@ -0,0 +1,12 @@ +import 'package:campus_flutter/base/enums/device.dart'; +import 'package:flutter/cupertino.dart'; + +class DeviceService { + static Device getType(BuildContext context) { + return MediaQuery.orientationOf(context) == Orientation.landscape + ? Device.landscapeTablet + : MediaQuery.sizeOf(context).width > 600 + ? Device.portraitTablet + : Device.phone; + } +} diff --git a/lib/campusComponent/model/student_club.dart b/lib/campusComponent/model/student_club.dart index 15576062..afcbb7ab 100644 --- a/lib/campusComponent/model/student_club.dart +++ b/lib/campusComponent/model/student_club.dart @@ -3,4 +3,4 @@ import 'package:html/parser.dart'; extension ParsedStudentClub on StudentClub { String get parsedName => parseFragment(name).text ?? name; -} \ No newline at end of file +} diff --git a/lib/campusComponent/model/student_club_collection.dart b/lib/campusComponent/model/student_club_collection.dart index 7a5cd8c7..14687ec1 100644 --- a/lib/campusComponent/model/student_club_collection.dart +++ b/lib/campusComponent/model/student_club_collection.dart @@ -3,4 +3,4 @@ import 'package:html/parser.dart'; extension ParsedStudentClubCollection on StudentClubCollection { String get parsedTitle => parseFragment(title).text ?? title; -} \ No newline at end of file +} diff --git a/lib/campusComponent/screen/movie_screen.dart b/lib/campusComponent/screen/movie_screen.dart new file mode 100644 index 00000000..c36e0244 --- /dev/null +++ b/lib/campusComponent/screen/movie_screen.dart @@ -0,0 +1,77 @@ +import 'package:campus_flutter/base/enums/device.dart'; +import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; +import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; +import 'package:campus_flutter/base/extensions/context.dart'; +import 'package:campus_flutter/base/services/device_type_service.dart'; +import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; +import 'package:campus_flutter/base/util/url_launcher.dart'; +import 'package:campus_flutter/campusComponent/view/movie/movie_card_view.dart'; +import 'package:campus_flutter/campusComponent/viewmodel/movies_viewmodel.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class MovieScreen extends ConsumerWidget { + const MovieScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return StreamBuilder( + stream: ref.watch(movieViewModel).movies, + builder: (context, snapshot) { + return Scaffold( + appBar: AppBar( + title: const Text("TU Film"), + actions: [ + IconButton( + onPressed: () => UrlLauncher.urlString( + "https://www.tu-film.de/", + ref, + ), + icon: const Icon(Icons.open_in_new), + ), + ], + ), + body: () { + if (snapshot.hasData) { + return GridView.count( + padding: EdgeInsets.all(context.padding), + crossAxisCount: crossAxisCount(context), + mainAxisSpacing: context.padding, + crossAxisSpacing: context.padding, + childAspectRatio: 250 / 470, + children: [ + for (var movie in snapshot.data!) MovieCardView(movie: movie), + ], + ); + } else if (snapshot.hasError) { + return Center( + child: ErrorHandlingRouter( + error: snapshot.error, + errorHandlingViewType: ErrorHandlingViewType.fullScreen, + ), + ); + } else { + return Center( + child: DelayedLoadingIndicator( + name: context.tr("movies"), + ), + ); + } + }(), + ); + }, + ); + } + + int crossAxisCount(BuildContext context) { + switch (DeviceService.getType(context)) { + case Device.landscapeTablet: + return 6; + case Device.portraitTablet: + return 4; + case Device.phone: + return 2; + } + } +} diff --git a/lib/campusComponent/screen/news_screen.dart b/lib/campusComponent/screen/news_screen.dart new file mode 100644 index 00000000..7e856f23 --- /dev/null +++ b/lib/campusComponent/screen/news_screen.dart @@ -0,0 +1,88 @@ +import 'package:campus_flutter/base/enums/device.dart'; +import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; +import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; +import 'package:campus_flutter/base/extensions/context.dart'; +import 'package:campus_flutter/base/services/device_type_service.dart'; +import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; +import 'package:campus_flutter/campusComponent/view/news/news_card_view.dart'; +import 'package:campus_flutter/campusComponent/viewmodel/news_viewmodel.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class NewsScreen extends ConsumerWidget { + const NewsScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + return StreamBuilder( + stream: ref.watch(newsViewModel).newsBySource, + builder: (context, snapshot) { + return DefaultTabController( + length: snapshot.data?.length ?? 0, + child: Scaffold( + appBar: AppBar( + title: Text(context.tr("news")), + bottom: TabBar( + isScrollable: true, + tabs: [ + for (var newsSourceTitle in snapshot.data?.keys ?? []) + Tab(text: newsSourceTitle), + ], + ), + ), + body: () { + if (snapshot.hasData) { + return TabBarView( + children: [ + for (var collection in snapshot.data!.values) + GridView.count( + crossAxisCount: crossAxisCount(context), + mainAxisSpacing: context.padding, + crossAxisSpacing: context.padding, + padding: EdgeInsets.all(context.padding), + childAspectRatio: 1.1, + children: [ + for (var news in collection) + LayoutBuilder( + builder: (context, constraints) => NewsCardView( + news: news, + width: constraints.maxWidth, + ), + ), + ], + ), + ], + ); + } else if (snapshot.hasError) { + return Center( + child: ErrorHandlingRouter( + error: snapshot.error, + errorHandlingViewType: ErrorHandlingViewType.fullScreen, + ), + ); + } else { + return Center( + child: DelayedLoadingIndicator( + name: context.tr("news"), + ), + ); + } + }(), + ), + ); + }, + ); + } + + int crossAxisCount(BuildContext context) { + switch (DeviceService.getType(context)) { + case Device.landscapeTablet: + return 3; + case Device.portraitTablet: + return 2; + case Device.phone: + return 1; + } + } +} diff --git a/lib/campusComponent/screen/student_clubs_screen.dart b/lib/campusComponent/screen/student_clubs_screen.dart index b853581a..7bee7b72 100644 --- a/lib/campusComponent/screen/student_clubs_screen.dart +++ b/lib/campusComponent/screen/student_clubs_screen.dart @@ -1,10 +1,14 @@ +import 'package:campus_flutter/base/enums/device.dart'; import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pb.dart'; +import 'package:campus_flutter/base/services/device_type_service.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; +import 'package:campus_flutter/base/util/url_launcher.dart'; import 'package:campus_flutter/campusComponent/model/student_club_collection.dart'; import 'package:campus_flutter/campusComponent/view/studentClub/student_club_item_view.dart'; import 'package:campus_flutter/campusComponent/viewmodel/student_club_viewmodel.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -21,6 +25,15 @@ class StudentClubsScreen extends ConsumerWidget { child: Scaffold( appBar: AppBar( title: const Text("Student Clubs"), + actions: [ + IconButton( + onPressed: () => UrlLauncher.urlString( + studentClubUrl(context), + ref, + ), + icon: const Icon(Icons.open_in_new), + ), + ], bottom: TabBar( isScrollable: true, tabs: [ @@ -88,10 +101,21 @@ class StudentClubsScreen extends ConsumerWidget { } int crossAxisCount(BuildContext context) { - return MediaQuery.orientationOf(context) == Orientation.landscape - ? 6 - : MediaQuery.sizeOf(context).width > 600 - ? 4 - : 2; + switch (DeviceService.getType(context)) { + case Device.landscapeTablet: + return 6; + case Device.portraitTablet: + return 4; + case Device.phone: + return 2; + } + } + + String studentClubUrl(BuildContext context) { + if (context.locale.languageCode == "de") { + return "https://www.sv.tum.de/sv/hochschulgruppen/"; + } else { + return "https://www.sv.tum.de/en/sv/student-groups/"; + } } } diff --git a/lib/campusComponent/view/movie/movie_card_view.dart b/lib/campusComponent/view/movie/movie_card_view.dart index a3e205dc..cbd66c76 100644 --- a/lib/campusComponent/view/movie/movie_card_view.dart +++ b/lib/campusComponent/view/movie/movie_card_view.dart @@ -32,35 +32,37 @@ class MovieCardView extends ConsumerWidget { Widget body(BuildContext context) { return Container( - color: Theme.of(context).cardTheme.color, + decoration: BoxDecoration( + color: Theme.of(context).cardTheme.color, + borderRadius: isCarousel + ? BorderRadius.zero + : const BorderRadius.all(Radius.circular(12)), + ), + clipBehavior: Clip.antiAlias, child: AspectRatio( aspectRatio: 250 / 470, child: Column( children: [ Expanded( flex: 8, - child: ClipRRect( - borderRadius: - const BorderRadius.vertical(top: Radius.circular(10)), - child: CachedNetworkImage( - imageUrl: movie.coverUrl.toString(), + child: CachedNetworkImage( + imageUrl: movie.coverUrl.toString(), + fit: BoxFit.fill, + height: double.infinity, + width: double.infinity, + fadeOutDuration: Duration.zero, + fadeInDuration: Duration.zero, + placeholder: (context, string) => Image.asset( + "assets/images/placeholders/movie_placeholder.png", + fit: BoxFit.fill, + height: double.infinity, + width: double.infinity, + ), + errorWidget: (context, url, error) => Image.asset( + "assets/images/placeholders/movie_placeholder.png", fit: BoxFit.fill, height: double.infinity, width: double.infinity, - fadeOutDuration: Duration.zero, - fadeInDuration: Duration.zero, - placeholder: (context, string) => Image.asset( - "assets/images/placeholders/movie_placeholder.png", - fit: BoxFit.fill, - height: double.infinity, - width: double.infinity, - ), - errorWidget: (context, url, error) => Image.asset( - "assets/images/placeholders/movie_placeholder.png", - fit: BoxFit.fill, - height: double.infinity, - width: double.infinity, - ), ), ), ), diff --git a/lib/campusComponent/view/movie/movies_widget_view.dart b/lib/campusComponent/view/movie/movies_widget_view.dart index f0c0fb42..84c110f0 100644 --- a/lib/campusComponent/view/movie/movies_widget_view.dart +++ b/lib/campusComponent/view/movie/movies_widget_view.dart @@ -1,4 +1,5 @@ import 'package:campus_flutter/base/enums/error_handling_view_type.dart'; +import 'package:campus_flutter/base/routing/routes.dart'; import 'package:campus_flutter/base/util/delayed_loading_indicator.dart'; import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; import 'package:campus_flutter/base/errorHandling/error_handling_router.dart'; @@ -9,6 +10,7 @@ import 'package:campus_flutter/campusComponent/view/movie/movie_card_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; class MovieWidgetView extends ConsumerStatefulWidget { const MovieWidgetView({super.key}); @@ -33,7 +35,29 @@ class _MoviesHomeWidgetState extends ConsumerState { if (snapshot.hasData && snapshot.data!.isEmpty) { return const SizedBox.shrink(); } else { - return WidgetFrameView(title: "TU Film", child: body(snapshot)); + return WidgetFrameView( + titleWidget: Row( + children: [ + Text( + "TU Film", + style: Theme.of(context).textTheme.titleMedium, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const Spacer(), + InkWell( + child: Text( + context.tr("all"), + style: Theme.of(context).textTheme.titleMedium, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + onTap: () => context.push(movies), + ), + ], + ), + child: body(snapshot), + ); } }, ); diff --git a/lib/campusComponent/view/news/news_card_view.dart b/lib/campusComponent/view/news/news_card_view.dart index 542e76e7..d281bc56 100644 --- a/lib/campusComponent/view/news/news_card_view.dart +++ b/lib/campusComponent/view/news/news_card_view.dart @@ -39,7 +39,10 @@ class NewsCardView extends ConsumerWidget { Widget body(String imageUrl, BuildContext context) { return Container( - color: Theme.of(context).cardTheme.color, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Theme.of(context).cardTheme.color, + ), child: AspectRatio( aspectRatio: 1.1, child: Column( diff --git a/lib/campusComponent/view/news/news_widget_view.dart b/lib/campusComponent/view/news/news_widget_view.dart index 50e789c9..91be5744 100644 --- a/lib/campusComponent/view/news/news_widget_view.dart +++ b/lib/campusComponent/view/news/news_widget_view.dart @@ -27,7 +27,26 @@ class _NewsWidgetViewState extends ConsumerState { @override Widget build(BuildContext context) { return WidgetFrameView( - title: context.tr("latestNews"), + titleWidget: Row( + children: [ + Text( + context.tr("news"), + style: Theme.of(context).textTheme.titleMedium, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const Spacer(), + InkWell( + child: Text( + context.tr("all"), + style: Theme.of(context).textTheme.titleMedium, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + onTap: () => context.push(news), + ), + ], + ), child: StreamBuilder( stream: ref.watch(newsViewModel).news, builder: (context, snapshot) { diff --git a/lib/campusComponent/viewmodel/movies_viewmodel.dart b/lib/campusComponent/viewmodel/movies_viewmodel.dart index 71357b27..04c311f5 100644 --- a/lib/campusComponent/viewmodel/movies_viewmodel.dart +++ b/lib/campusComponent/viewmodel/movies_viewmodel.dart @@ -6,8 +6,7 @@ import 'package:rxdart/rxdart.dart'; final movieViewModel = Provider((ref) => MovieViewModel()); class MovieViewModel { - BehaviorSubject?> movies = BehaviorSubject.seeded(null); - + final BehaviorSubject?> movies = BehaviorSubject.seeded(null); final BehaviorSubject lastFetched = BehaviorSubject.seeded(null); Future fetch(bool forcedRefresh) async { diff --git a/lib/campusComponent/viewmodel/news_viewmodel.dart b/lib/campusComponent/viewmodel/news_viewmodel.dart index c82996d4..8e5c5a5a 100644 --- a/lib/campusComponent/viewmodel/news_viewmodel.dart +++ b/lib/campusComponent/viewmodel/news_viewmodel.dart @@ -1,5 +1,4 @@ import 'package:campus_flutter/base/networking/apis/tumdev/campus_backend.pbgrpc.dart'; - import 'package:campus_flutter/campusComponent/service/news_service.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:rxdart/rxdart.dart'; @@ -7,6 +6,8 @@ import 'package:rxdart/rxdart.dart'; final newsViewModel = Provider((ref) => NewsViewModel()); class NewsViewModel { + BehaviorSubject>?> newsBySource = + BehaviorSubject.seeded(null); BehaviorSubject?> news = BehaviorSubject.seeded(null); final BehaviorSubject lastFetched = BehaviorSubject.seeded(null); @@ -15,12 +16,26 @@ class NewsViewModel { return NewsService.fetchRecentNews(forcedRefresh).then( (value) { lastFetched.add(value.$1); + newsBySource.add(mapNewsBySource(value.$2)); news.add(value.$2); }, onError: (error) => news.addError(error), ); } + Map> mapNewsBySource(List news) { + Map> mappedNews = {}; + + for (var news in news) { + if (!mappedNews.containsKey(news.sourceTitle)) { + mappedNews[news.sourceTitle] = []; + } + mappedNews[news.sourceTitle]!.add(news); + } + + return mappedNews; + } + List latestFiveNews() { if (news.value != null) { final news = this.news.value!;