diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 841e615..fbc6bb2 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2,33 +2,33 @@ PODS: - connectivity_plus (0.0.1): - Flutter - ReachabilitySwift - - Firebase/CoreOnly (10.18.0): - - FirebaseCore (= 10.18.0) - - Firebase/Messaging (10.18.0): + - Firebase/CoreOnly (10.20.0): + - FirebaseCore (= 10.20.0) + - Firebase/Messaging (10.20.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 10.18.0) - - firebase_core (2.24.2): - - Firebase/CoreOnly (= 10.18.0) + - FirebaseMessaging (~> 10.20.0) + - firebase_core (2.25.4): + - Firebase/CoreOnly (= 10.20.0) - Flutter - - firebase_messaging (14.7.10): - - Firebase/Messaging (= 10.18.0) + - firebase_messaging (14.7.15): + - Firebase/Messaging (= 10.20.0) - firebase_core - Flutter - - FirebaseCore (10.18.0): + - FirebaseCore (10.20.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.12) - GoogleUtilities/Logger (~> 7.12) - - FirebaseCoreInternal (10.20.0): + - FirebaseCoreInternal (10.21.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseInstallations (10.20.0): + - FirebaseInstallations (10.21.0): - FirebaseCore (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/UserDefaults (~> 7.8) - PromisesObjC (~> 2.1) - - FirebaseMessaging (10.18.0): + - FirebaseMessaging (10.20.0): - FirebaseCore (~> 10.0) - FirebaseInstallations (~> 10.0) - - GoogleDataTransport (~> 9.2) + - GoogleDataTransport (~> 9.3) - GoogleUtilities/AppDelegateSwizzler (~> 7.8) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Reachability (~> 7.8) @@ -155,14 +155,14 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d - Firebase: 414ad272f8d02dfbf12662a9d43f4bba9bec2a06 - firebase_core: 0af4a2b24f62071f9bf283691c0ee41556dcb3f5 - firebase_messaging: 90e8a6db84b6e1e876cebce4f30f01dc495e7014 - FirebaseCore: 2322423314d92f946219c8791674d2f3345b598f - FirebaseCoreInternal: efeeb171ac02d623bdaefe121539939821e10811 - FirebaseInstallations: 558b1da7d65afeb996fd5c814332f013234ece4e - FirebaseMessaging: 9bc34a98d2e0237e1b121915120d4d48ddcf301e - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + Firebase: 10c8cb12fb7ad2ae0c09ffc86cd9c1ab392a0031 + firebase_core: a46c312d8bae4defa3d009b2aa7b5b413aeb394e + firebase_messaging: 40d7dd2f3e88a6367c7326cf601f84633d477582 + FirebaseCore: 28045c1560a2600d284b9c45a904fe322dc890b6 + FirebaseCoreInternal: 43c1788eaeee9d1b97caaa751af567ce11010d00 + FirebaseInstallations: 390ea1d10a4d02b20c965cbfd527ee9b3b412acb + FirebaseMessaging: 06c414a21b122396a26847c523d5c370f8325df5 + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_inappwebview: 3d32228f1304635e7c028b0d4252937730bbc6cf flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be GoogleDataTransport: 57c22343ab29bc686febbf7cbb13bad167c2d8fe @@ -178,8 +178,8 @@ SPEC CHECKSUMS: url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812 video_player_avfoundation: 02011213dab73ae3687df27ce441fbbcc82b5579 wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47 - webview_flutter_wkwebview: 4f3e50f7273d31e5500066ed267e3ae4309c5ae4 + webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36 PODFILE CHECKSUM: 7be2f5f74864d463a8ad433546ed1de7e0f29aef -COCOAPODS: 1.15.0 +COCOAPODS: 1.15.2 diff --git a/lib/base/networking/api/handler/auth_handler.dart b/lib/base/networking/api/handler/auth_handler.dart index dc6cbfa..3d14da5 100644 --- a/lib/base/networking/api/handler/auth_handler.dart +++ b/lib/base/networking/api/handler/auth_handler.dart @@ -51,7 +51,8 @@ class AuthHandler { .i('Received HTTP response with status code: ${response.statusCode}'); } catch (e) { _logger.e( - 'Error during basic authentication for user: $username, Error: $e'); + 'Error during basic authentication for user: $username, Error: $e', + ); throw AppError.userError(); } try { diff --git a/lib/base/networking/api/handler/token_handler.dart b/lib/base/networking/api/handler/token_handler.dart index 9e76736..760c558 100644 --- a/lib/base/networking/api/handler/token_handler.dart +++ b/lib/base/networking/api/handler/token_handler.dart @@ -60,9 +60,8 @@ class TokenHandler { final token = await _storage.read(key: key); if (token == null) { _logger.w('Token not found for key: $key'); - throw AppError.authenticationError(); + return ''; } - _logger.i('Token successfully loaded for key: $key'); return token; } catch (e) { diff --git a/lib/main.dart b/lib/main.dart index f29f3b5..22421af 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,3 @@ -import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:gocast_mobile/models/user/user_state_model.dart'; @@ -42,18 +41,6 @@ class App extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final connectivityStatus = ref.watch(connectivityProvider); - connectivityStatus.whenData((result) { - if(result == ConnectivityResult.none) { - WidgetsBinding.instance.addPostFrameCallback((_) { - if (ModalRoute.of(context)?.settings.name != '/downloads') { - Navigator.of(context).pushNamed('/downloads'); - return; - } - }); - } - }); - final userState = ref.watch(userViewModelProvider); bool isLoggedIn = ref.watch(userViewModelProvider).user != null; diff --git a/lib/providers.dart b/lib/providers.dart index baecf02..63fd960 100644 --- a/lib/providers.dart +++ b/lib/providers.dart @@ -89,4 +89,3 @@ final playbackSpeedsProvider = StateProvider>((ref) { final connectivityProvider = StreamProvider((ref) { return Connectivity().onConnectivityChanged; }); - diff --git a/lib/view_models/chat_view_model.dart b/lib/view_models/chat_view_model.dart index be01210..0d2c63a 100644 --- a/lib/view_models/chat_view_model.dart +++ b/lib/view_models/chat_view_model.dart @@ -18,7 +18,10 @@ class ChatViewModel extends StateNotifier { final messages = await ChatHandlers(_grpcHandler).getChatMessages(streamId); state = state.copyWith( - messages: messages, isLoading: false, accessDenied: false); + messages: messages, + isLoading: false, + accessDenied: false, + ); } catch (e) { state = state.copyWith( error: e as AppError, @@ -38,10 +41,15 @@ class ChatViewModel extends StateNotifier { final messages = await ChatHandlers(_grpcHandler).getChatMessages(streamId); final combinedMessages = List.from(state.messages ?? []) - ..addAll(messages - .where((newMessage) => !state.messages!.contains(newMessage))); + ..addAll( + messages + .where((newMessage) => !state.messages!.contains(newMessage)), + ); state = state.copyWith( - messages: combinedMessages, isLoading: false, accessDenied: false); + messages: combinedMessages, + isLoading: false, + accessDenied: false, + ); } catch (e) { state = state.copyWith( error: e as AppError, diff --git a/lib/view_models/download_view_model.dart b/lib/view_models/download_view_model.dart index 9a80560..999682c 100644 --- a/lib/view_models/download_view_model.dart +++ b/lib/view_models/download_view_model.dart @@ -43,8 +43,12 @@ class DownloadViewModel extends StateNotifier { } } - Future downloadVideo(String videoUrl, Stream stream, - String streamName, String streamDate) async { + Future downloadVideo( + String videoUrl, + Stream stream, + String streamName, + String streamDate, + ) async { try { final directory = await getApplicationDocumentsDirectory(); final filePath = @@ -60,10 +64,12 @@ class DownloadViewModel extends StateNotifier { final videoDetailsMap = { 'filePath': filePath, 'name': streamName, - 'duration': Tools.formatDuration(stream.end - .toDateTime() - .difference(stream.start.toDateTime()) - .inMinutes), + 'duration': Tools.formatDuration( + stream.end + .toDateTime() + .difference(stream.start.toDateTime()) + .inMinutes, + ), 'description': stream.description, 'date': streamDate, }; diff --git a/lib/views/chat_view/chat_view_state.dart b/lib/views/chat_view/chat_view_state.dart index bb6a1a4..91479e8 100644 --- a/lib/views/chat_view/chat_view_state.dart +++ b/lib/views/chat_view/chat_view_state.dart @@ -62,7 +62,8 @@ class ChatViewState extends ConsumerState { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( - 'You are sending messages too fast. Please wait a 60 seconds.'), + 'You are sending messages too fast. Please wait a 60 seconds.', + ), ), ); }); diff --git a/lib/views/chat_view/poll_view_state.dart b/lib/views/chat_view/poll_view_state.dart index 95ae178..a254150 100644 --- a/lib/views/chat_view/poll_view_state.dart +++ b/lib/views/chat_view/poll_view_state.dart @@ -264,7 +264,8 @@ class PollViewState extends ConsumerState { return Padding( padding: const EdgeInsets.all( - 8.0), // Consistent padding with the rest of the layout + 8.0, + ), // Consistent padding with the rest of the layout child: ElevatedButton( onPressed: selectedOptions.containsKey(poll.id) ? () { diff --git a/lib/views/chat_view/suggested_streams_list.dart b/lib/views/chat_view/suggested_streams_list.dart index 5e7dbf4..4acc79c 100644 --- a/lib/views/chat_view/suggested_streams_list.dart +++ b/lib/views/chat_view/suggested_streams_list.dart @@ -21,9 +21,11 @@ class SuggestedStreamsWidget extends StatelessWidget { final stream = suggestedStreams[index]; return ListTile( leading: const Icon(Icons.play_circle_outline), - title: Text(stream.name != '' - ? stream.name - : 'Lecture: ${DateFormat('EEEE. dd', Localizations.localeOf(context).toString()).format(stream.start.toDateTime())}'), + title: Text( + stream.name != '' + ? stream.name + : 'Lecture: ${DateFormat('EEEE. dd', Localizations.localeOf(context).toString()).format(stream.start.toDateTime())}', + ), subtitle: Text( DateFormat('dd MMMM yyyy').format(stream.start.toDateTime()), ), diff --git a/lib/views/course_view/components/course_card.dart b/lib/views/course_view/components/course_card.dart index 125cfc7..543758b 100644 --- a/lib/views/course_view/components/course_card.dart +++ b/lib/views/course_view/components/course_card.dart @@ -171,8 +171,11 @@ class CourseCard extends StatelessWidget { child: _buildCourseTitle(themeData.textTheme), ), if (isPinned) - Icon(Icons.push_pin, - color: themeData.primaryColor, size: 16), + Icon( + Icons.push_pin, + color: themeData.primaryColor, + size: 16, + ), ], ), ), diff --git a/lib/views/course_view/components/small_stream_card.dart b/lib/views/course_view/components/small_stream_card.dart index a7315e2..be5342b 100644 --- a/lib/views/course_view/components/small_stream_card.dart +++ b/lib/views/course_view/components/small_stream_card.dart @@ -77,14 +77,20 @@ class SmallStreamCard extends StatelessWidget { } Widget _buildStreamCard( - BuildContext context, ThemeData themeData, double cardWidth) { + BuildContext context, + ThemeData themeData, + double cardWidth, + ) { return (isDownloaded != null && showDeleteConfirmationDialog != null) ? _buildDownloadedCard(context, themeData, cardWidth) : _buildLiveCard(themeData, cardWidth); } Widget _buildDownloadedCard( - BuildContext context, ThemeData themeData, double cardWidth) { + BuildContext context, + ThemeData themeData, + double cardWidth, + ) { return Slidable( key: Key(courseId.toString()), closeOnScroll: true, diff --git a/lib/views/course_view/components/stream_card.dart b/lib/views/course_view/components/stream_card.dart index cf1ffc1..91cd5fa 100644 --- a/lib/views/course_view/components/stream_card.dart +++ b/lib/views/course_view/components/stream_card.dart @@ -195,10 +195,12 @@ class StreamCardState extends ConsumerState { ), padding: const EdgeInsets.all(5), child: Text( - Tools.formatDuration(widget.stream.end - .toDateTime() - .difference(widget.stream.start.toDateTime()) - .inMinutes), + Tools.formatDuration( + widget.stream.end + .toDateTime() + .difference(widget.stream.start.toDateTime()) + .inMinutes, + ), style: themeData.textTheme.labelSmall?.copyWith( fontSize: 12, color: Colors.white, diff --git a/lib/views/course_view/downloaded_courses_view/download_content_view.dart b/lib/views/course_view/downloaded_courses_view/download_content_view.dart index 117f059..a039361 100644 --- a/lib/views/course_view/downloaded_courses_view/download_content_view.dart +++ b/lib/views/course_view/downloaded_courses_view/download_content_view.dart @@ -47,8 +47,9 @@ class DownloadCoursesContentView extends ConsumerWidget { child: Center( child: Padding( padding: const EdgeInsets.symmetric(vertical: 295.0), - child: Text(AppLocalizations.of(context)! - .no_downloaded_courses), + child: Text( + AppLocalizations.of(context)!.no_downloaded_courses, + ), ), ), ), diff --git a/lib/views/course_view/downloaded_courses_view/downloaded_courses_view.dart b/lib/views/course_view/downloaded_courses_view/downloaded_courses_view.dart index aad5ea3..8ba6784 100644 --- a/lib/views/course_view/downloaded_courses_view/downloaded_courses_view.dart +++ b/lib/views/course_view/downloaded_courses_view/downloaded_courses_view.dart @@ -67,7 +67,7 @@ class DownloadedCoursesState extends ConsumerState { title: AppLocalizations.of(context)!.download, filterOptions: [ AppLocalizations.of(context)!.newest_first, - AppLocalizations.of(context)!.oldest_first + AppLocalizations.of(context)!.oldest_first, ], onClick: (String choice) { // Handle filter option click diff --git a/lib/views/notifications_view/notifications_screen_view.dart b/lib/views/notifications_view/notifications_screen_view.dart index f92427e..421458b 100644 --- a/lib/views/notifications_view/notifications_screen_view.dart +++ b/lib/views/notifications_view/notifications_screen_view.dart @@ -41,14 +41,17 @@ class NotificationsScreen extends ConsumerWidget { scrollDirection: Axis.vertical, children: [ _buildSectionHeader( - AppLocalizations.of(context)!.banner_notification), + AppLocalizations.of(context)!.banner_notification, + ), for (var alert in bannerAlerts) _buildBannerAlert(alert), _buildSectionHeader( - AppLocalizations.of(context)!.feature_notifications), + AppLocalizations.of(context)!.feature_notifications, + ), for (var notification in featureNotifications) _buildFeatureNotification(notification), _buildSectionHeader( - AppLocalizations.of(context)!.recent_uploads), + AppLocalizations.of(context)!.recent_uploads, + ), for (var notification in pushNotifications) _buildPushNotification(notification), ], @@ -76,8 +79,10 @@ class NotificationsScreen extends ConsumerWidget { children: [ Expanded( child: Center( - child: Text(AppLocalizations.of(context)! - .no_notifications_found)), + child: Text( + AppLocalizations.of(context)!.no_notifications_found, + ), + ), ), ], ), diff --git a/lib/views/on_boarding_view/welcome_screen_view.dart b/lib/views/on_boarding_view/welcome_screen_view.dart index b7d59ad..ee6b83f 100644 --- a/lib/views/on_boarding_view/welcome_screen_view.dart +++ b/lib/views/on_boarding_view/welcome_screen_view.dart @@ -1,9 +1,11 @@ +import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:gocast_mobile/providers.dart'; import 'package:gocast_mobile/utils/constants.dart'; import 'package:gocast_mobile/views/login_view/internal_login_view.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:logger/logger.dart'; /// Welcome screen view. /// This is the first screen that the user sees when the app is opened. @@ -16,11 +18,36 @@ class WelcomeScreen extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - // Getting screen size for responsive layout + final connectivityStatus = ref.watch(connectivityProvider); + Logger().i(connectivityStatus.toString()); + return connectivityStatus.when( + data: (result) { + // If there's no connectivity, navigate or replace the current view. + if (result == ConnectivityResult.none) { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (ModalRoute.of(context)?.settings.name != '/downloads') { + Navigator.of(context).pushReplacementNamed('/downloads'); + } + }); + } + return _buildMainLayout(context, ref); + }, + loading: () => const Center(child: CircularProgressIndicator()), + error: (error, stackTrace) { + return Center( + child: Text( + AppLocalizations.of(context)!.error_occurred, + style: const TextStyle(color: Colors.red), + ), + ); + }, + ); + } + + Widget _buildMainLayout(BuildContext context, WidgetRef ref) { final screenSize = MediaQuery.of(context).size; final bool isPortrait = MediaQuery.of(context).orientation == Orientation.portrait; - return Scaffold( body: SafeArea( child: Padding( @@ -144,8 +171,10 @@ class WelcomeScreen extends ConsumerWidget { valueColor: AlwaysStoppedAnimation(Colors.white), ), ) - : Text(AppLocalizations.of(context)!.tum_login, - style: const TextStyle(fontSize: 18)), + : Text( + AppLocalizations.of(context)!.tum_login, + style: const TextStyle(fontSize: 18), + ), onPressed: () => handleSSOLogin(context, ref), ); } @@ -161,8 +190,10 @@ class WelcomeScreen extends ConsumerWidget { shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.0)), ), - child: Text(AppLocalizations.of(context)!.continue_without, - style: const TextStyle(fontSize: 18)), + child: Text( + AppLocalizations.of(context)!.continue_without, + style: const TextStyle(fontSize: 18), + ), onPressed: () { Navigator.pushNamed(context, '/publiccourses'); }, diff --git a/lib/views/settings_view/edit_profile_screen_view.dart b/lib/views/settings_view/edit_profile_screen_view.dart index 4d470b5..c792be8 100644 --- a/lib/views/settings_view/edit_profile_screen_view.dart +++ b/lib/views/settings_view/edit_profile_screen_view.dart @@ -152,9 +152,11 @@ class EditProfileScreenState extends ConsumerState { return AlertDialog( backgroundColor: Theme.of(context).colorScheme.onPrimary, title: const Text("Error"), - content: Text(errorMessage == '3 months' - ? AppLocalizations.of(context)!.name_change_limitation - : errorMessage), + content: Text( + errorMessage == '3 months' + ? AppLocalizations.of(context)!.name_change_limitation + : errorMessage, + ), actions: [ TextButton( child: const Text("OK"), diff --git a/lib/views/settings_view/settings_screen_view.dart b/lib/views/settings_view/settings_screen_view.dart index 2735280..4c26c69 100644 --- a/lib/views/settings_view/settings_screen_view.dart +++ b/lib/views/settings_view/settings_screen_view.dart @@ -48,7 +48,8 @@ class _SettingsScreenState extends ConsumerState { _buildProfileTile(userState), const Divider(), _buildSectionTitle( - AppLocalizations.of(context)!.account_settings), + AppLocalizations.of(context)!.account_settings, + ), _buildEditableListTile(AppLocalizations.of(context)!.edit_profile, () async { bool isAuthenticated = @@ -90,7 +91,9 @@ class _SettingsScreenState extends ConsumerState { const Divider(), _buildSectionTitle(AppLocalizations.of(context)!.more), _buildNavigableListTile( - AppLocalizations.of(context)!.about_us, ""), + AppLocalizations.of(context)!.about_us, + "", + ), _buildNavigableListTile( AppLocalizations.of(context)!.privacy_policy, "https://live.rbg.tum.de/privacy", diff --git a/lib/views/video_view/offline_video_player/offline_video_player.dart b/lib/views/video_view/offline_video_player/offline_video_player.dart index efb00b3..4684959 100644 --- a/lib/views/video_view/offline_video_player/offline_video_player.dart +++ b/lib/views/video_view/offline_video_player/offline_video_player.dart @@ -79,7 +79,8 @@ class OfflineVideoPlayerPageState // Initialize the controller manager. void _initializeControllerManager() { _controllerManager = OfflineVideoPlayerControllerManager( - localPath: widget.videoDetails.filePath); + localPath: widget.videoDetails.filePath, + ); } // Initialize the video player and seek to the last progress. diff --git a/lib/views/video_view/utils/download_service.dart b/lib/views/video_view/utils/download_service.dart index 83c2c9c..0e5886d 100644 --- a/lib/views/video_view/utils/download_service.dart +++ b/lib/views/video_view/utils/download_service.dart @@ -29,7 +29,11 @@ class DownloadService { }); Future downloadVideo( - Stream stream, String type, String streamName, String streamDate) async { + Stream stream, + String type, + String streamName, + String streamDate, + ) async { bool canDownload = await _handleDownloadConnectivity(stream, type); if (!canDownload) return; @@ -54,9 +58,9 @@ class DownloadService { .downloadVideo(downloadUrl, stream, streamName, streamDate) .then((localPath) { if (!isWidgetMounted()) return; - onShowSnackBar(localPath.isNotEmpty - ? downloadCompletedMessage - : downloadFailedMessage); + onShowSnackBar( + localPath.isNotEmpty ? downloadCompletedMessage : downloadFailedMessage, + ); }); } diff --git a/pubspec.lock b/pubspec.lock index d5e227f..fae966c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: f5628cd9c92ed11083f425fd1f8f1bc60ecdda458c81d73b143aeda036c35fe7 + sha256: "1a52f1afae8ab7ac4741425114713bdbba802f1ce1e0648e167ffcc6e05e96cf" url: "https://pub.dev" source: hosted - version: "1.3.16" + version: "1.3.21" archive: dependency: transitive description: @@ -189,10 +189,10 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: "96607c0e829a581c2a483c658f04e8b159964c3bae2730f73297070bc85d40bb" + sha256: "7e049e32a9d347616edb39542cf92cd53fdb4a99fb6af0a0bff327c14cd76445" url: "https://pub.dev" source: hosted - version: "2.24.2" + version: "2.25.4" firebase_core_platform_interface: dependency: transitive description: @@ -205,34 +205,34 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: d585bdf3c656c3f7821ba1bd44da5f13365d22fcecaf5eb75c4295246aaa83c0 + sha256: "57e61d6010e253b36d38191cefd6199d7849152cdcd234b61ca290cdb278a0ba" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.4" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "980259425fa5e2afc03e533f33723335731d21a56fd255611083bceebf4373a8" + sha256: "9c97b20c012542252a8853f11334efd833ddae83551fe37d27f87d885c655038" url: "https://pub.dev" source: hosted - version: "14.7.10" + version: "14.7.15" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: "54e283a0e41d81d854636ad0dad73066adc53407a60a7c3189c9656e2f1b6107" + sha256: d464b255e922c7915dc4b0ebc305ebad4e1f130519bee3d6e568ef2ea1613a4b url: "https://pub.dev" source: hosted - version: "4.5.18" + version: "4.5.23" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "90dc7ed885e90a24bb0e56d661d4d2b5f84429697fd2cbb9e5890a0ca370e6f4" + sha256: f3f71aeec719ec1fe2c99f75cd74d00d33f1c240cf1e402cc9d43883e84f935a url: "https://pub.dev" source: hosted - version: "3.5.18" + version: "3.6.4" fixnum: dependency: "direct main" description: @@ -271,10 +271,10 @@ packages: dependency: "direct main" description: name: flutter_riverpod - sha256: da9591d1f8d5881628ccd5c25c40e74fc3eef50ba45e40c3905a06e1712412d5 + sha256: "4bce556b7ecbfea26109638d5237684538d4abc509d253e6c5c4c5733b360098" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.10" flutter_secure_storage: dependency: "direct main" description: @@ -601,10 +601,10 @@ packages: dependency: transitive description: name: riverpod - sha256: "942999ee48b899f8a46a860f1e13cee36f2f77609eb54c5b7a669bb20d550b11" + sha256: "548e2192eb7aeb826eb89387f814edb76594f3363e2c0bb99dd733d795ba3589" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.5.0" rxdart: dependency: "direct main" description: @@ -918,18 +918,18 @@ packages: dependency: "direct main" description: name: webview_flutter - sha256: "71e1bfaef41016c8d5954291df5e9f8c6172f1f6ff3af01b5656456ddb11f94c" + sha256: d81b68e88cc353e546afb93fb38958e3717282c5ac6e5d3be4a4aef9fc3c1413 url: "https://pub.dev" source: hosted - version: "4.4.4" + version: "4.5.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: "4ea3c4e1b8ed590162b15b8a61b41b1ef3ff179a314627c16ce40c086d94b8af" + sha256: "3e5f4e9d818086b0d01a66fb1ff9cc72ab0cc58c71980e3d3661c5685ea0efb0" url: "https://pub.dev" source: hosted - version: "3.14.0" + version: "3.15.0" webview_flutter_platform_interface: dependency: transitive description: @@ -942,10 +942,10 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: "4d062ad505390ecef1c4bfb6001cd857a51e00912cc9dfb66edb1886a9ebd80c" + sha256: "9bf168bccdf179ce90450b5f37e36fe263f591c9338828d6bf09b6f8d0f57f86" url: "https://pub.dev" source: hosted - version: "3.10.2" + version: "3.12.0" win32: dependency: transitive description: @@ -971,5 +971,5 @@ packages: source: hosted version: "6.5.0" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.2.3 <4.0.0" + flutter: ">=3.16.6" diff --git a/pubspec.yaml b/pubspec.yaml index dad6fd1..c2abb7e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,7 +8,7 @@ environment: dependencies: connectivity_plus: ^5.0.2 - tuple: ^2.0.1 + tuple: ^2.0.2 bloc: ^8.1.2 cookie_jar: ^4.0.8 dio_cookie_manager: ^3.1.1 @@ -20,7 +20,7 @@ dependencies: provider: ^6.1.1 shared_preferences: ^2.2.2 uni_links: ^0.5.1 - flutter_riverpod: ^2.4.9 + flutter_riverpod: ^2.4.10 rxdart: ^0.27.7 grpc: ^3.2.4 dio: ^5.4.0 @@ -30,10 +30,10 @@ dependencies: logger: ^2.0.2+1 flutter_secure_storage: ^9.0.0 video_player: ^2.8.2 - firebase_core: ^2.24.2 - firebase_messaging: ^14.7.10 + firebase_core: ^2.25.4 + firebase_messaging: ^14.7.15 chewie: ^1.7.4 - url_launcher: ^6.2.3 + url_launcher: ^6.2.4 path_provider: any jwt_decode: ^0.3.1 flutter_localizations: