diff --git a/.github/workflows/build-mobile.yml b/.github/workflows/build-mobile.yml index ef00d28f52..50cd7921bd 100644 --- a/.github/workflows/build-mobile.yml +++ b/.github/workflows/build-mobile.yml @@ -45,7 +45,7 @@ jobs: uses: subosito/flutter-action@v2 with: channel: "stable" - flutter-version: "3.13.6" + flutter-version: "3.16.9" cache: true - name: Create the Keystore diff --git a/.github/workflows/static_analysis.yml b/.github/workflows/static_analysis.yml index 661287252e..a6de171fb8 100644 --- a/.github/workflows/static_analysis.yml +++ b/.github/workflows/static_analysis.yml @@ -23,7 +23,7 @@ jobs: uses: subosito/flutter-action@v2 with: channel: "stable" - flutter-version: "3.13.6" + flutter-version: "3.16.9" - name: Install dependencies run: dart pub get diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index baf904252a..b011417d44 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -204,7 +204,7 @@ jobs: uses: subosito/flutter-action@v2 with: channel: "stable" - flutter-version: "3.13.6" + flutter-version: "3.16.9" - name: Run tests working-directory: ./mobile run: flutter test -j 1 diff --git a/mobile/.fvmrc b/mobile/.fvmrc index 54ef3132c8..82738076b0 100644 --- a/mobile/.fvmrc +++ b/mobile/.fvmrc @@ -1,3 +1,3 @@ { - "flutter": "3.13.6" + "flutter": "3.16.9" } \ No newline at end of file diff --git a/mobile/.vscode/settings.json b/mobile/.vscode/settings.json index d7e3ad9fd0..3b366ab39b 100644 --- a/mobile/.vscode/settings.json +++ b/mobile/.vscode/settings.json @@ -1,5 +1,5 @@ { - "dart.flutterSdkPath": ".fvm\\versions\\3.13.6", + "dart.flutterSdkPath": ".fvm\\versions\\3.16.9", "search.exclude": { "**/.fvm": true }, diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle index c46bcecfd1..96d2db23f5 100644 --- a/mobile/android/app/build.gradle +++ b/mobile/android/app/build.gradle @@ -34,7 +34,7 @@ if (keystorePropertiesFile.exists()) { android { - compileSdkVersion 33 + compileSdkVersion 34 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/mobile/integration_test/test_utils/login_helper.dart b/mobile/integration_test/test_utils/login_helper.dart index b0810a8ac6..b3a867af68 100644 --- a/mobile/integration_test/test_utils/login_helper.dart +++ b/mobile/integration_test/test_utils/login_helper.dart @@ -52,7 +52,10 @@ class ImmichTestLoginHelper { } Future pressLoginButton() async { - await pumpUntilFound(tester, find.textContaining("login_form_button_text".tr())); + await pumpUntilFound( + tester, + find.textContaining("login_form_button_text".tr()), + ); final button = find.textContaining("login_form_button_text".tr()); await tester.tap(button); } @@ -62,7 +65,7 @@ class ImmichTestLoginHelper { } Future assertLoginFailed({int timeoutSeconds = 15}) async { - await pumpUntilFound(tester, find.text("login_form_failed_login".tr())); + await pumpUntilFound(tester, find.text("login_form_failed_login".tr())); } } @@ -80,9 +83,9 @@ enum LoginCredentials { ), wrongInstanceUrl( - "https://does-not-exist.preview.immich.app", - "demo@immich.app", - "demo", + "https://does-not-exist.preview.immich.app", + "demo@immich.app", + "demo", ); const LoginCredentials(this.server, this.email, this.password); diff --git a/mobile/lib/modules/activities/providers/activity.provider.g.dart b/mobile/lib/modules/activities/providers/activity.provider.g.dart index e25c0c46bf..9c20a09793 100644 Binary files a/mobile/lib/modules/activities/providers/activity.provider.g.dart and b/mobile/lib/modules/activities/providers/activity.provider.g.dart differ diff --git a/mobile/lib/modules/album/ui/add_to_album_bottom_sheet.dart b/mobile/lib/modules/album/ui/add_to_album_bottom_sheet.dart index 01eef96261..a3e6aca95d 100644 --- a/mobile/lib/modules/album/ui/add_to_album_bottom_sheet.dart +++ b/mobile/lib/modules/album/ui/add_to_album_bottom_sheet.dart @@ -19,9 +19,9 @@ class AddToAlbumBottomSheet extends HookConsumerWidget { final List assets; const AddToAlbumBottomSheet({ - Key? key, + super.key, required this.assets, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/album/ui/add_to_album_sliverlist.dart b/mobile/lib/modules/album/ui/add_to_album_sliverlist.dart index d948afcd8e..73aabbc66d 100644 --- a/mobile/lib/modules/album/ui/add_to_album_sliverlist.dart +++ b/mobile/lib/modules/album/ui/add_to_album_sliverlist.dart @@ -13,12 +13,12 @@ class AddToAlbumSliverList extends HookConsumerWidget { final bool enabled; const AddToAlbumSliverList({ - Key? key, + super.key, required this.onAddToAlbum, required this.albums, required this.sharedAlbums, this.enabled = true, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/album/ui/album_action_outlined_button.dart b/mobile/lib/modules/album/ui/album_action_outlined_button.dart index 768be0e3cc..02676ae6e2 100644 --- a/mobile/lib/modules/album/ui/album_action_outlined_button.dart +++ b/mobile/lib/modules/album/ui/album_action_outlined_button.dart @@ -7,11 +7,11 @@ class AlbumActionOutlinedButton extends StatelessWidget { final IconData iconData; const AlbumActionOutlinedButton({ - Key? key, + super.key, this.onPressed, required this.labelText, required this.iconData, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/mobile/lib/modules/album/ui/album_thumbnail_card.dart b/mobile/lib/modules/album/ui/album_thumbnail_card.dart index 1ef032d55c..0b5854fa50 100644 --- a/mobile/lib/modules/album/ui/album_thumbnail_card.dart +++ b/mobile/lib/modules/album/ui/album_thumbnail_card.dart @@ -13,11 +13,11 @@ class AlbumThumbnailCard extends StatelessWidget { final bool showOwner; const AlbumThumbnailCard({ - Key? key, + super.key, required this.album, this.onTap, this.showOwner = false, - }) : super(key: key); + }); final Album album; diff --git a/mobile/lib/modules/album/ui/album_thumbnail_listtile.dart b/mobile/lib/modules/album/ui/album_thumbnail_listtile.dart index 8dca112106..107d08b1fb 100644 --- a/mobile/lib/modules/album/ui/album_thumbnail_listtile.dart +++ b/mobile/lib/modules/album/ui/album_thumbnail_listtile.dart @@ -11,10 +11,10 @@ import 'package:openapi/api.dart'; class AlbumThumbnailListTile extends StatelessWidget { const AlbumThumbnailListTile({ - Key? key, + super.key, required this.album, this.onTap, - }) : super(key: key); + }); final Album album; final void Function()? onTap; diff --git a/mobile/lib/modules/album/ui/album_title_text_field.dart b/mobile/lib/modules/album/ui/album_title_text_field.dart index 57b82a80d1..ace174c9c6 100644 --- a/mobile/lib/modules/album/ui/album_title_text_field.dart +++ b/mobile/lib/modules/album/ui/album_title_text_field.dart @@ -6,12 +6,12 @@ import 'package:immich_mobile/modules/album/providers/album_title.provider.dart' class AlbumTitleTextField extends ConsumerWidget { const AlbumTitleTextField({ - Key? key, + super.key, required this.isAlbumTitleEmpty, required this.albumTitleTextFieldFocusNode, required this.albumTitleController, required this.isAlbumTitleTextFieldFocus, - }) : super(key: key); + }); final ValueNotifier isAlbumTitleEmpty; final FocusNode albumTitleTextFieldFocusNode; diff --git a/mobile/lib/modules/album/ui/album_viewer_appbar.dart b/mobile/lib/modules/album/ui/album_viewer_appbar.dart index 1753d3f193..996e25d0ff 100644 --- a/mobile/lib/modules/album/ui/album_viewer_appbar.dart +++ b/mobile/lib/modules/album/ui/album_viewer_appbar.dart @@ -16,14 +16,14 @@ import 'package:immich_mobile/shared/views/immich_loading_overlay.dart'; class AlbumViewerAppbar extends HookConsumerWidget implements PreferredSizeWidget { const AlbumViewerAppbar({ - Key? key, + super.key, required this.album, required this.userId, required this.titleFocusNode, this.onAddPhotos, this.onAddUsers, required this.onActivities, - }) : super(key: key); + }); final Album album; final String userId; diff --git a/mobile/lib/modules/album/ui/album_viewer_editable_title.dart b/mobile/lib/modules/album/ui/album_viewer_editable_title.dart index 1ece28afbb..89c72e3e80 100644 --- a/mobile/lib/modules/album/ui/album_viewer_editable_title.dart +++ b/mobile/lib/modules/album/ui/album_viewer_editable_title.dart @@ -10,10 +10,10 @@ class AlbumViewerEditableTitle extends HookConsumerWidget { final Album album; final FocusNode titleFocusNode; const AlbumViewerEditableTitle({ - Key? key, + super.key, required this.album, required this.titleFocusNode, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/album/ui/shared_album_thumbnail_image.dart b/mobile/lib/modules/album/ui/shared_album_thumbnail_image.dart index 8cbe6423a8..57dd787719 100644 --- a/mobile/lib/modules/album/ui/shared_album_thumbnail_image.dart +++ b/mobile/lib/modules/album/ui/shared_album_thumbnail_image.dart @@ -6,8 +6,7 @@ import 'package:immich_mobile/shared/ui/immich_image.dart'; class SharedAlbumThumbnailImage extends HookConsumerWidget { final Asset asset; - const SharedAlbumThumbnailImage({Key? key, required this.asset}) - : super(key: key); + const SharedAlbumThumbnailImage({super.key, required this.asset}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/album/views/album_viewer_page.dart b/mobile/lib/modules/album/views/album_viewer_page.dart index 0356f023a5..5d3f075644 100644 --- a/mobile/lib/modules/album/views/album_viewer_page.dart +++ b/mobile/lib/modules/album/views/album_viewer_page.dart @@ -31,7 +31,7 @@ import 'package:immich_mobile/shared/views/immich_loading_overlay.dart'; class AlbumViewerPage extends HookConsumerWidget { final int albumId; - const AlbumViewerPage({Key? key, required this.albumId}) : super(key: key); + const AlbumViewerPage({super.key, required this.albumId}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/album/views/asset_selection_page.dart b/mobile/lib/modules/album/views/asset_selection_page.dart index 4d54e9420b..1da0ebd742 100644 --- a/mobile/lib/modules/album/views/asset_selection_page.dart +++ b/mobile/lib/modules/album/views/asset_selection_page.dart @@ -15,11 +15,11 @@ import 'package:isar/isar.dart'; @RoutePage() class AssetSelectionPage extends HookConsumerWidget { const AssetSelectionPage({ - Key? key, + super.key, required this.existingAssets, this.canDeselect = false, required this.query, - }) : super(key: key); + }); final Set existingAssets; final QueryBuilder? query; diff --git a/mobile/lib/modules/album/views/create_album_page.dart b/mobile/lib/modules/album/views/create_album_page.dart index 2c26a98d35..e8514873e8 100644 --- a/mobile/lib/modules/album/views/create_album_page.dart +++ b/mobile/lib/modules/album/views/create_album_page.dart @@ -21,10 +21,10 @@ class CreateAlbumPage extends HookConsumerWidget { final List? initialAssets; const CreateAlbumPage({ - Key? key, + super.key, required this.isSharedAlbum, this.initialAssets, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/album/views/library_page.dart b/mobile/lib/modules/album/views/library_page.dart index 9b3e49020d..4a0f57ab59 100644 --- a/mobile/lib/modules/album/views/library_page.dart +++ b/mobile/lib/modules/album/views/library_page.dart @@ -13,7 +13,7 @@ import 'package:immich_mobile/shared/ui/immich_app_bar.dart'; @RoutePage() class LibraryPage extends HookConsumerWidget { - const LibraryPage({Key? key}) : super(key: key); + const LibraryPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/album/views/select_additional_user_for_sharing_page.dart b/mobile/lib/modules/album/views/select_additional_user_for_sharing_page.dart index 23452050e4..cb17e6638f 100644 --- a/mobile/lib/modules/album/views/select_additional_user_for_sharing_page.dart +++ b/mobile/lib/modules/album/views/select_additional_user_for_sharing_page.dart @@ -14,8 +14,7 @@ import 'package:immich_mobile/shared/ui/user_circle_avatar.dart'; class SelectAdditionalUserForSharingPage extends HookConsumerWidget { final Album album; - const SelectAdditionalUserForSharingPage({Key? key, required this.album}) - : super(key: key); + const SelectAdditionalUserForSharingPage({super.key, required this.album}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/album/views/select_user_for_sharing_page.dart b/mobile/lib/modules/album/views/select_user_for_sharing_page.dart index 8c58ff90d8..61550e04f7 100644 --- a/mobile/lib/modules/album/views/select_user_for_sharing_page.dart +++ b/mobile/lib/modules/album/views/select_user_for_sharing_page.dart @@ -15,8 +15,7 @@ import 'package:immich_mobile/shared/ui/user_circle_avatar.dart'; @RoutePage>() class SelectUserForSharingPage extends HookConsumerWidget { - const SelectUserForSharingPage({Key? key, required this.assets}) - : super(key: key); + const SelectUserForSharingPage({super.key, required this.assets}); final Set assets; diff --git a/mobile/lib/modules/album/views/sharing_page.dart b/mobile/lib/modules/album/views/sharing_page.dart index 50ecca9ad5..dcaf732c8f 100644 --- a/mobile/lib/modules/album/views/sharing_page.dart +++ b/mobile/lib/modules/album/views/sharing_page.dart @@ -16,7 +16,7 @@ import 'package:immich_mobile/shared/ui/immich_image.dart'; @RoutePage() class SharingPage extends HookConsumerWidget { - const SharingPage({Key? key}) : super(key: key); + const SharingPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/asset_viewer/providers/asset_description.provider.dart b/mobile/lib/modules/asset_viewer/providers/asset_description.provider.dart index 9ac68761ae..c38b886e44 100644 --- a/mobile/lib/modules/asset_viewer/providers/asset_description.provider.dart +++ b/mobile/lib/modules/asset_viewer/providers/asset_description.provider.dart @@ -14,7 +14,7 @@ class AssetDescriptionNotifier extends StateNotifier { AssetDescriptionNotifier( this._db, - this._service, + this._service, this._asset, ) : super('') { _fetchLocalDescription(); @@ -34,9 +34,7 @@ class AssetDescriptionNotifier extends StateNotifier { } // Subscribe to local changes - final exifInfo = await _db - .exifInfos - .get(localExifId); + final exifInfo = await _db.exifInfos.get(localExifId); // Guard if (exifInfo?.description == null) { @@ -75,13 +73,11 @@ class AssetDescriptionNotifier extends StateNotifier { return; } - return _service - .setDescription(description, remoteAssetId, localExifId); + return _service.setDescription(description, remoteAssetId, localExifId); } } -final assetDescriptionProvider = StateNotifierProvider - .autoDispose +final assetDescriptionProvider = StateNotifierProvider.autoDispose .family( (ref, asset) => AssetDescriptionNotifier( ref.watch(dbProvider), @@ -89,5 +85,3 @@ final assetDescriptionProvider = StateNotifierProvider asset, ), ); - - diff --git a/mobile/lib/modules/asset_viewer/services/image_viewer.service.dart b/mobile/lib/modules/asset_viewer/services/image_viewer.service.dart index 0f68310b77..301fbdfe29 100644 --- a/mobile/lib/modules/asset_viewer/services/image_viewer.service.dart +++ b/mobile/lib/modules/asset_viewer/services/image_viewer.service.dart @@ -24,11 +24,13 @@ class ImageViewerService { try { // Download LivePhotos image and motion part if (asset.isImage && asset.livePhotoVideoId != null && Platform.isIOS) { - var imageResponse = await _apiService.assetApi.downloadFileOldWithHttpInfo( + var imageResponse = + await _apiService.assetApi.downloadFileOldWithHttpInfo( asset.remoteId!, ); - var motionReponse = await _apiService.assetApi.downloadFileOldWithHttpInfo( + var motionReponse = + await _apiService.assetApi.downloadFileOldWithHttpInfo( asset.livePhotoVideoId!, ); diff --git a/mobile/lib/modules/asset_viewer/ui/advanced_bottom_sheet.dart b/mobile/lib/modules/asset_viewer/ui/advanced_bottom_sheet.dart index c265346b00..fe241fa652 100644 --- a/mobile/lib/modules/asset_viewer/ui/advanced_bottom_sheet.dart +++ b/mobile/lib/modules/asset_viewer/ui/advanced_bottom_sheet.dart @@ -7,8 +7,7 @@ import 'package:immich_mobile/shared/models/asset.dart'; class AdvancedBottomSheet extends HookConsumerWidget { final Asset assetDetail; - const AdvancedBottomSheet({Key? key, required this.assetDetail}) - : super(key: key); + const AdvancedBottomSheet({super.key, required this.assetDetail}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/asset_viewer/ui/animated_play_pause.dart b/mobile/lib/modules/asset_viewer/ui/animated_play_pause.dart index bee5636e18..7935567b8c 100644 --- a/mobile/lib/modules/asset_viewer/ui/animated_play_pause.dart +++ b/mobile/lib/modules/asset_viewer/ui/animated_play_pause.dart @@ -3,11 +3,11 @@ import 'package:flutter/material.dart'; /// A widget that animates implicitly between a play and a pause icon. class AnimatedPlayPause extends StatefulWidget { const AnimatedPlayPause({ - Key? key, + super.key, required this.playing, this.size, this.color, - }) : super(key: key); + }); final double? size; final bool playing; diff --git a/mobile/lib/modules/asset_viewer/ui/center_play_button.dart b/mobile/lib/modules/asset_viewer/ui/center_play_button.dart index 437daa8979..237d09c142 100644 --- a/mobile/lib/modules/asset_viewer/ui/center_play_button.dart +++ b/mobile/lib/modules/asset_viewer/ui/center_play_button.dart @@ -3,14 +3,14 @@ import 'package:immich_mobile/modules/asset_viewer/ui/animated_play_pause.dart'; class CenterPlayButton extends StatelessWidget { const CenterPlayButton({ - Key? key, + super.key, required this.backgroundColor, this.iconColor, required this.show, required this.isPlaying, required this.isFinished, this.onPressed, - }) : super(key: key); + }); final Color backgroundColor; final Color? iconColor; diff --git a/mobile/lib/modules/asset_viewer/ui/exif_bottom_sheet.dart b/mobile/lib/modules/asset_viewer/ui/exif_bottom_sheet.dart index f0665bbe81..45d73dc71c 100644 --- a/mobile/lib/modules/asset_viewer/ui/exif_bottom_sheet.dart +++ b/mobile/lib/modules/asset_viewer/ui/exif_bottom_sheet.dart @@ -19,7 +19,7 @@ import 'package:url_launcher/url_launcher.dart'; class ExifBottomSheet extends HookConsumerWidget { final Asset asset; - const ExifBottomSheet({Key? key, required this.asset}) : super(key: key); + const ExifBottomSheet({super.key, required this.asset}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/asset_viewer/ui/top_control_app_bar.dart b/mobile/lib/modules/asset_viewer/ui/top_control_app_bar.dart index e8444ef8be..5d7258fb24 100644 --- a/mobile/lib/modules/asset_viewer/ui/top_control_app_bar.dart +++ b/mobile/lib/modules/asset_viewer/ui/top_control_app_bar.dart @@ -8,7 +8,7 @@ import 'package:immich_mobile/shared/providers/asset.provider.dart'; class TopControlAppBar extends HookConsumerWidget { const TopControlAppBar({ - Key? key, + super.key, required this.asset, required this.onMoreInfoPressed, required this.onDownloadPressed, @@ -20,7 +20,7 @@ class TopControlAppBar extends HookConsumerWidget { required this.isOwner, required this.onActivitiesPressed, required this.isPartner, - }) : super(key: key); + }); final Asset asset; final Function onMoreInfoPressed; diff --git a/mobile/lib/modules/asset_viewer/ui/video_player_controls.dart b/mobile/lib/modules/asset_viewer/ui/video_player_controls.dart index 25ec8ab96a..781e84e458 100644 --- a/mobile/lib/modules/asset_viewer/ui/video_player_controls.dart +++ b/mobile/lib/modules/asset_viewer/ui/video_player_controls.dart @@ -12,8 +12,8 @@ import 'package:video_player/video_player.dart'; class VideoPlayerControls extends ConsumerStatefulWidget { const VideoPlayerControls({ - Key? key, - }) : super(key: key); + super.key, + }); @override VideoPlayerControlsState createState() => VideoPlayerControlsState(); diff --git a/mobile/lib/modules/asset_viewer/views/gallery_viewer.dart b/mobile/lib/modules/asset_viewer/views/gallery_viewer.dart index 4109412b4a..ae9a3ba929 100644 --- a/mobile/lib/modules/asset_viewer/views/gallery_viewer.dart +++ b/mobile/lib/modules/asset_viewer/views/gallery_viewer.dart @@ -751,15 +751,16 @@ class GalleryViewerPage extends HookConsumerWidget { } }); - return Scaffold( - backgroundColor: Colors.black, - body: WillPopScope( - onWillPop: () async { - // Change immersive mode back to normal "edgeToEdge" mode - await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); - return true; - }, - child: Stack( + return PopScope( + canPop: false, + onPopInvoked: (_) { + // Change immersive mode back to normal "edgeToEdge" mode + SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); + context.pop(); + }, + child: Scaffold( + backgroundColor: Colors.black, + body: Stack( children: [ PhotoViewGallery.builder( scaleStateChangedCallback: (state) { diff --git a/mobile/lib/modules/asset_viewer/views/video_viewer_page.dart b/mobile/lib/modules/asset_viewer/views/video_viewer_page.dart index 463d211a6b..d8e6b704fb 100644 --- a/mobile/lib/modules/asset_viewer/views/video_viewer_page.dart +++ b/mobile/lib/modules/asset_viewer/views/video_viewer_page.dart @@ -26,14 +26,14 @@ class VideoViewerPage extends HookConsumerWidget { final VoidCallback? onPaused; const VideoViewerPage({ - Key? key, + super.key, required this.asset, required this.isMotionVideo, required this.onVideoEnded, this.onPlaying, this.onPaused, this.placeholder, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { @@ -112,7 +112,7 @@ class VideoPlayer extends StatefulWidget { final Widget? placeholder; const VideoPlayer({ - Key? key, + super.key, this.url, this.jwtToken, this.file, @@ -121,7 +121,7 @@ class VideoPlayer extends StatefulWidget { this.onPlaying, this.onPaused, this.placeholder, - }) : super(key: key); + }); @override State createState() => _VideoPlayerState(); diff --git a/mobile/lib/modules/backup/providers/ios_background_settings.provider.dart b/mobile/lib/modules/backup/providers/ios_background_settings.provider.dart index b914fd2c6b..5dbf7c0498 100644 --- a/mobile/lib/modules/backup/providers/ios_background_settings.provider.dart +++ b/mobile/lib/modules/backup/providers/ios_background_settings.provider.dart @@ -15,24 +15,27 @@ class IOSBackgroundSettings { }); } -class IOSBackgroundSettingsNotifier extends StateNotifier { +class IOSBackgroundSettingsNotifier + extends StateNotifier { final BackgroundService _service; IOSBackgroundSettingsNotifier(this._service) : super(null); IOSBackgroundSettings? get settings => state; Future refresh() async { - final lastFetchTime = await _service.getIOSBackupLastRun(IosBackgroundTask.fetch); - final lastProcessingTime = await _service.getIOSBackupLastRun(IosBackgroundTask.processing); + final lastFetchTime = + await _service.getIOSBackupLastRun(IosBackgroundTask.fetch); + final lastProcessingTime = + await _service.getIOSBackupLastRun(IosBackgroundTask.processing); int numberOfProcesses = await _service.getIOSBackupNumberOfProcesses(); - final appRefreshEnabled = await _service.getIOSBackgroundAppRefreshEnabled(); + final appRefreshEnabled = + await _service.getIOSBackgroundAppRefreshEnabled(); // If this is enabled and there are no background processes, // the user just enabled app refresh in Settings. // But we don't have any background services running, since it was disabled // before. - if (await _service.isBackgroundBackupEnabled() && - numberOfProcesses == 0) { + if (await _service.isBackgroundBackupEnabled() && numberOfProcesses == 0) { // We need to restart the background service await _service.enableService(); numberOfProcesses = await _service.getIOSBackupNumberOfProcesses(); @@ -48,10 +51,9 @@ class IOSBackgroundSettingsNotifier extends StateNotifier( +final iOSBackgroundSettingsProvider = StateNotifierProvider< + IOSBackgroundSettingsNotifier, IOSBackgroundSettings?>( (ref) => IOSBackgroundSettingsNotifier(ref.watch(backgroundServiceProvider)), ); - diff --git a/mobile/lib/modules/backup/services/backup.service.dart b/mobile/lib/modules/backup/services/backup.service.dart index 3fe4761d6a..fd92222ef5 100644 --- a/mobile/lib/modules/backup/services/backup.service.dart +++ b/mobile/lib/modules/backup/services/backup.service.dart @@ -429,10 +429,10 @@ class BackupService { class MultipartRequest extends http.MultipartRequest { /// Creates a new [MultipartRequest]. MultipartRequest( - String method, - Uri url, { + super.method, + super.url, { required this.onProgress, - }) : super(method, url); + }); final void Function(int bytes, int totalBytes) onProgress; diff --git a/mobile/lib/modules/backup/ui/album_info_card.dart b/mobile/lib/modules/backup/ui/album_info_card.dart index 91c9f7515c..b962fbe05e 100644 --- a/mobile/lib/modules/backup/ui/album_info_card.dart +++ b/mobile/lib/modules/backup/ui/album_info_card.dart @@ -14,8 +14,7 @@ class AlbumInfoCard extends HookConsumerWidget { final Uint8List? imageData; final AvailableAlbum albumInfo; - const AlbumInfoCard({Key? key, this.imageData, required this.albumInfo}) - : super(key: key); + const AlbumInfoCard({super.key, this.imageData, required this.albumInfo}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/backup/ui/album_info_list_tile.dart b/mobile/lib/modules/backup/ui/album_info_list_tile.dart index 64b742be70..484577f8c3 100644 --- a/mobile/lib/modules/backup/ui/album_info_list_tile.dart +++ b/mobile/lib/modules/backup/ui/album_info_list_tile.dart @@ -14,8 +14,7 @@ class AlbumInfoListTile extends HookConsumerWidget { final Uint8List? imageData; final AvailableAlbum albumInfo; - const AlbumInfoListTile({Key? key, this.imageData, required this.albumInfo}) - : super(key: key); + const AlbumInfoListTile({super.key, this.imageData, required this.albumInfo}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/backup/ui/backup_info_card.dart b/mobile/lib/modules/backup/ui/backup_info_card.dart index 4feccd19b3..e1b56a970a 100644 --- a/mobile/lib/modules/backup/ui/backup_info_card.dart +++ b/mobile/lib/modules/backup/ui/backup_info_card.dart @@ -7,11 +7,11 @@ class BackupInfoCard extends StatelessWidget { final String subtitle; final String info; const BackupInfoCard({ - Key? key, + super.key, required this.title, required this.subtitle, required this.info, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/mobile/lib/modules/backup/views/album_preview_page.dart b/mobile/lib/modules/backup/views/album_preview_page.dart index 234df958a6..e3c2b34b8f 100644 --- a/mobile/lib/modules/backup/views/album_preview_page.dart +++ b/mobile/lib/modules/backup/views/album_preview_page.dart @@ -10,7 +10,7 @@ import 'package:photo_manager/photo_manager.dart'; @RoutePage() class AlbumPreviewPage extends HookConsumerWidget { final AssetPathEntity album; - const AlbumPreviewPage({Key? key, required this.album}) : super(key: key); + const AlbumPreviewPage({super.key, required this.album}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/backup/views/backup_album_selection_page.dart b/mobile/lib/modules/backup/views/backup_album_selection_page.dart index c6dd6d3ab5..e892e57c1d 100644 --- a/mobile/lib/modules/backup/views/backup_album_selection_page.dart +++ b/mobile/lib/modules/backup/views/backup_album_selection_page.dart @@ -12,7 +12,7 @@ import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart'; @RoutePage() class BackupAlbumSelectionPage extends HookConsumerWidget { - const BackupAlbumSelectionPage({Key? key}) : super(key: key); + const BackupAlbumSelectionPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { // final availableAlbums = ref.watch(backupProvider).availableAlbums; diff --git a/mobile/lib/modules/backup/views/backup_controller_page.dart b/mobile/lib/modules/backup/views/backup_controller_page.dart index 61122fd74b..3b219e3f6c 100644 --- a/mobile/lib/modules/backup/views/backup_controller_page.dart +++ b/mobile/lib/modules/backup/views/backup_controller_page.dart @@ -20,7 +20,7 @@ import 'package:immich_mobile/modules/backup/ui/backup_info_card.dart'; @RoutePage() class BackupControllerPage extends HookConsumerWidget { - const BackupControllerPage({Key? key}) : super(key: key); + const BackupControllerPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/backup/views/backup_options_page.dart b/mobile/lib/modules/backup/views/backup_options_page.dart index 898101a657..c3beb2f8c5 100644 --- a/mobile/lib/modules/backup/views/backup_options_page.dart +++ b/mobile/lib/modules/backup/views/backup_options_page.dart @@ -25,7 +25,7 @@ import 'package:wakelock_plus/wakelock_plus.dart'; @RoutePage() class BackupOptionsPage extends HookConsumerWidget { - const BackupOptionsPage({Key? key}) : super(key: key); + const BackupOptionsPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { BackUpState backupState = ref.watch(backupProvider); diff --git a/mobile/lib/modules/backup/views/failed_backup_status_page.dart b/mobile/lib/modules/backup/views/failed_backup_status_page.dart index 5679a41664..b92c3f4dbb 100644 --- a/mobile/lib/modules/backup/views/failed_backup_status_page.dart +++ b/mobile/lib/modules/backup/views/failed_backup_status_page.dart @@ -5,10 +5,11 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/modules/backup/providers/error_backup_list.provider.dart'; import 'package:intl/intl.dart'; import 'package:photo_manager/photo_manager.dart'; +import 'package:photo_manager_image_provider/photo_manager_image_provider.dart'; @RoutePage() class FailedBackupStatusPage extends HookConsumerWidget { - const FailedBackupStatusPage({Key? key}) : super(key: key); + const FailedBackupStatusPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final errorBackupList = ref.watch(errorBackupListProvider); diff --git a/mobile/lib/modules/favorite/views/favorites_page.dart b/mobile/lib/modules/favorite/views/favorites_page.dart index a3e4b435aa..1352a57c3a 100644 --- a/mobile/lib/modules/favorite/views/favorites_page.dart +++ b/mobile/lib/modules/favorite/views/favorites_page.dart @@ -8,7 +8,7 @@ import 'package:immich_mobile/shared/ui/asset_grid/multiselect_grid.dart'; @RoutePage() class FavoritesPage extends HookConsumerWidget { - const FavoritesPage({Key? key}) : super(key: key); + const FavoritesPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/home/ui/asset_grid/disable_multi_select_button.dart b/mobile/lib/modules/home/ui/asset_grid/disable_multi_select_button.dart index bf792fab65..3c97f54cfc 100644 --- a/mobile/lib/modules/home/ui/asset_grid/disable_multi_select_button.dart +++ b/mobile/lib/modules/home/ui/asset_grid/disable_multi_select_button.dart @@ -4,10 +4,10 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart'; class DisableMultiSelectButton extends ConsumerWidget { const DisableMultiSelectButton({ - Key? key, + super.key, required this.onPressed, required this.selectedItemCount, - }) : super(key: key); + }); final Function onPressed; final int selectedItemCount; diff --git a/mobile/lib/modules/home/ui/asset_grid/draggable_scrollbar_custom.dart b/mobile/lib/modules/home/ui/asset_grid/draggable_scrollbar_custom.dart index d28d825c97..cd9bece255 100644 --- a/mobile/lib/modules/home/ui/asset_grid/draggable_scrollbar_custom.dart +++ b/mobile/lib/modules/home/ui/asset_grid/draggable_scrollbar_custom.dart @@ -57,7 +57,7 @@ class DraggableScrollbar extends StatefulWidget { final Function(bool scrolling) scrollStateListener; DraggableScrollbar.semicircle({ - Key? key, + super.key, Key? scrollThumbKey, this.alwaysVisibleScrollThumb = false, required this.child, @@ -76,8 +76,7 @@ class DraggableScrollbar extends StatefulWidget { heightScrollThumb * 0.6, scrollThumbKey, alwaysVisibleScrollThumb, - ), - super(key: key); + ); @override DraggableScrollbarState createState() => DraggableScrollbarState(); @@ -170,12 +169,12 @@ class ScrollLabel extends StatelessWidget { BoxConstraints.tightFor(width: 72.0, height: 28.0); const ScrollLabel({ - Key? key, + super.key, required this.child, required this.animation, required this.backgroundColor, this.constraints = _defaultConstraints, - }) : super(key: key); + }); @override Widget build(BuildContext context) { @@ -509,10 +508,10 @@ class SlideFadeTransition extends StatelessWidget { final Widget child; const SlideFadeTransition({ - Key? key, + super.key, required this.animation, required this.child, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/mobile/lib/modules/home/ui/asset_grid/group_divider_title.dart b/mobile/lib/modules/home/ui/asset_grid/group_divider_title.dart index 1455f53ef5..0c06fc1a1b 100644 --- a/mobile/lib/modules/home/ui/asset_grid/group_divider_title.dart +++ b/mobile/lib/modules/home/ui/asset_grid/group_divider_title.dart @@ -9,13 +9,13 @@ import 'package:immich_mobile/modules/settings/services/app_settings.service.dar class GroupDividerTitle extends HookConsumerWidget { const GroupDividerTitle({ - Key? key, + super.key, required this.text, required this.multiselectEnabled, required this.onSelect, required this.onDeselect, required this.selected, - }) : super(key: key); + }); final String text; final bool multiselectEnabled; diff --git a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid_view.dart b/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid_view.dart index a7587893d7..7087456c97 100644 --- a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid_view.dart +++ b/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid_view.dart @@ -389,15 +389,6 @@ class ImmichAssetGridViewState extends State { } } - Future onWillPop() async { - if (widget.selectionActive && _selectedAssets.isNotEmpty) { - _deselectAll(); - return false; - } - - return true; - } - @override void initState() { super.initState(); @@ -438,8 +429,9 @@ class ImmichAssetGridViewState extends State { @override Widget build(BuildContext context) { - return WillPopScope( - onWillPop: onWillPop, + return PopScope( + canPop: !(widget.selectionActive && _selectedAssets.isNotEmpty), + onPopInvoked: (didPop) => !didPop ? _deselectAll() : null, child: Stack( children: [ _buildAssetGrid(), diff --git a/mobile/lib/modules/home/ui/asset_grid/thumbnail_image.dart b/mobile/lib/modules/home/ui/asset_grid/thumbnail_image.dart index 6bf19a0d27..6454d9ba24 100644 --- a/mobile/lib/modules/home/ui/asset_grid/thumbnail_image.dart +++ b/mobile/lib/modules/home/ui/asset_grid/thumbnail_image.dart @@ -23,7 +23,7 @@ class ThumbnailImage extends StatelessWidget { final int heroOffset; const ThumbnailImage({ - Key? key, + super.key, required this.asset, required this.index, required this.loadAsset, @@ -36,7 +36,7 @@ class ThumbnailImage extends StatelessWidget { this.onDeselect, this.onSelect, this.heroOffset = 0, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/mobile/lib/modules/home/ui/control_bottom_app_bar.dart b/mobile/lib/modules/home/ui/control_bottom_app_bar.dart index 12c06eaefd..00cc0e1b33 100644 --- a/mobile/lib/modules/home/ui/control_bottom_app_bar.dart +++ b/mobile/lib/modules/home/ui/control_bottom_app_bar.dart @@ -33,7 +33,7 @@ class ControlBottomAppBar extends ConsumerWidget { final SelectionAssetState selectionAssetState; const ControlBottomAppBar({ - Key? key, + super.key, required this.onShare, this.onFavorite, this.onArchive, @@ -51,7 +51,7 @@ class ControlBottomAppBar extends ConsumerWidget { this.enabled = true, this.unarchive = false, this.unfavorite = false, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/home/ui/delete_dialog.dart b/mobile/lib/modules/home/ui/delete_dialog.dart index 9f20e696ba..82727e254e 100644 --- a/mobile/lib/modules/home/ui/delete_dialog.dart +++ b/mobile/lib/modules/home/ui/delete_dialog.dart @@ -6,9 +6,8 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/shared/ui/confirm_dialog.dart'; class DeleteDialog extends ConfirmDialog { - const DeleteDialog({Key? key, String? alert, required Function onDelete}) + const DeleteDialog({super.key, String? alert, required Function onDelete}) : super( - key: key, title: "delete_dialog_title", content: alert ?? "delete_dialog_alert", cancel: "delete_dialog_cancel", diff --git a/mobile/lib/modules/home/ui/draggable_scrollbar.dart b/mobile/lib/modules/home/ui/draggable_scrollbar.dart index 90e7d85e51..8bb45eeb7d 100644 --- a/mobile/lib/modules/home/ui/draggable_scrollbar.dart +++ b/mobile/lib/modules/home/ui/draggable_scrollbar.dart @@ -52,7 +52,7 @@ class DraggableScrollbar extends StatefulWidget { final bool alwaysVisibleScrollThumb; DraggableScrollbar({ - Key? key, + super.key, this.alwaysVisibleScrollThumb = false, required this.heightScrollThumb, required this.backgroundColor, @@ -64,11 +64,10 @@ class DraggableScrollbar extends StatefulWidget { this.scrollbarTimeToFade = const Duration(milliseconds: 600), this.labelTextBuilder, this.labelConstraints, - }) : assert(child.scrollDirection == Axis.vertical), - super(key: key); + }) : assert(child.scrollDirection == Axis.vertical); DraggableScrollbar.rrect({ - Key? key, + super.key, Key? scrollThumbKey, this.alwaysVisibleScrollThumb = false, required this.child, @@ -82,11 +81,10 @@ class DraggableScrollbar extends StatefulWidget { this.labelConstraints, }) : assert(child.scrollDirection == Axis.vertical), scrollThumbBuilder = - _thumbRRectBuilder(scrollThumbKey, alwaysVisibleScrollThumb), - super(key: key); + _thumbRRectBuilder(scrollThumbKey, alwaysVisibleScrollThumb); DraggableScrollbar.arrows({ - Key? key, + super.key, Key? scrollThumbKey, this.alwaysVisibleScrollThumb = false, required this.child, @@ -100,11 +98,10 @@ class DraggableScrollbar extends StatefulWidget { this.labelConstraints, }) : assert(child.scrollDirection == Axis.vertical), scrollThumbBuilder = - _thumbArrowBuilder(scrollThumbKey, alwaysVisibleScrollThumb), - super(key: key); + _thumbArrowBuilder(scrollThumbKey, alwaysVisibleScrollThumb); DraggableScrollbar.semicircle({ - Key? key, + super.key, Key? scrollThumbKey, this.alwaysVisibleScrollThumb = false, required this.child, @@ -121,8 +118,7 @@ class DraggableScrollbar extends StatefulWidget { heightScrollThumb * 0.6, scrollThumbKey, alwaysVisibleScrollThumb, - ), - super(key: key); + ); @override DraggableScrollbarState createState() => DraggableScrollbarState(); @@ -288,12 +284,12 @@ class ScrollLabel extends StatelessWidget { BoxConstraints.tightFor(width: 72.0, height: 28.0); const ScrollLabel({ - Key? key, + super.key, required this.child, required this.animation, required this.backgroundColor, this.constraints = _defaultConstraints, - }) : super(key: key); + }); @override Widget build(BuildContext context) { @@ -625,10 +621,10 @@ class SlideFadeTransition extends StatelessWidget { final Widget child; const SlideFadeTransition({ - Key? key, + super.key, required this.animation, required this.child, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/mobile/lib/modules/home/ui/upload_dialog.dart b/mobile/lib/modules/home/ui/upload_dialog.dart index a3feafb1ff..6b237ae16d 100644 --- a/mobile/lib/modules/home/ui/upload_dialog.dart +++ b/mobile/lib/modules/home/ui/upload_dialog.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; import 'package:immich_mobile/shared/ui/confirm_dialog.dart'; class UploadDialog extends ConfirmDialog { final Function onUpload; - const UploadDialog({Key? key, required this.onUpload}) + const UploadDialog({super.key, required this.onUpload}) : super( - key: key, title: 'upload_dialog_title', content: 'upload_dialog_info', cancel: 'upload_dialog_cancel', diff --git a/mobile/lib/modules/home/views/home_page.dart b/mobile/lib/modules/home/views/home_page.dart index ac0e89f6ae..86788b8296 100644 --- a/mobile/lib/modules/home/views/home_page.dart +++ b/mobile/lib/modules/home/views/home_page.dart @@ -20,7 +20,7 @@ import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart'; @RoutePage() class HomePage extends HookConsumerWidget { - const HomePage({Key? key}) : super(key: key); + const HomePage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/login/providers/authentication.provider.dart b/mobile/lib/modules/login/providers/authentication.provider.dart index 34ac29b5f1..23dcd50533 100644 --- a/mobile/lib/modules/login/providers/authentication.provider.dart +++ b/mobile/lib/modules/login/providers/authentication.provider.dart @@ -63,7 +63,7 @@ class AuthenticationNotifier extends StateNotifier { if (Platform.isIOS) { var iosInfo = await deviceInfoPlugin.iosInfo; _apiService.authenticationApi.apiClient - .addDefaultHeader('deviceModel', iosInfo.utsname.machine ?? ''); + .addDefaultHeader('deviceModel', iosInfo.utsname.machine); _apiService.authenticationApi.apiClient .addDefaultHeader('deviceType', 'iOS'); } else { diff --git a/mobile/lib/modules/login/ui/change_password_form.dart b/mobile/lib/modules/login/ui/change_password_form.dart index 95143ef829..2f5b5fe756 100644 --- a/mobile/lib/modules/login/ui/change_password_form.dart +++ b/mobile/lib/modules/login/ui/change_password_form.dart @@ -13,7 +13,7 @@ import 'package:immich_mobile/shared/providers/websocket.provider.dart'; import 'package:immich_mobile/shared/ui/immich_toast.dart'; class ChangePasswordForm extends HookConsumerWidget { - const ChangePasswordForm({Key? key}) : super(key: key); + const ChangePasswordForm({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -128,7 +128,7 @@ class ChangePasswordForm extends HookConsumerWidget { class PasswordInput extends StatelessWidget { final TextEditingController controller; - const PasswordInput({Key? key, required this.controller}) : super(key: key); + const PasswordInput({super.key, required this.controller}); @override Widget build(BuildContext context) { @@ -149,10 +149,10 @@ class ConfirmPasswordInput extends StatelessWidget { final TextEditingController confirmController; const ConfirmPasswordInput({ - Key? key, + super.key, required this.originalController, required this.confirmController, - }) : super(key: key); + }); String? _validateInput(String? email) { if (confirmController.value != originalController.value) { @@ -181,10 +181,10 @@ class ChangePasswordButton extends ConsumerWidget { final TextEditingController passwordController; final VoidCallback onPressed; const ChangePasswordButton({ - Key? key, + super.key, required this.passwordController, required this.onPressed, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/login/ui/login_form.dart b/mobile/lib/modules/login/ui/login_form.dart index 921eeb281f..79873ef6e8 100644 --- a/mobile/lib/modules/login/ui/login_form.dart +++ b/mobile/lib/modules/login/ui/login_form.dart @@ -22,7 +22,7 @@ import 'package:openapi/api.dart'; import 'package:permission_handler/permission_handler.dart'; class LoginForm extends HookConsumerWidget { - const LoginForm({Key? key}) : super(key: key); + const LoginForm({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -426,11 +426,11 @@ class ServerEndpointInput extends StatelessWidget { final Function()? onSubmit; const ServerEndpointInput({ - Key? key, + super.key, required this.controller, required this.focusNode, this.onSubmit, - }) : super(key: key); + }); String? _validateInput(String? url) { if (url == null || url.isEmpty) return null; @@ -474,11 +474,11 @@ class EmailInput extends StatelessWidget { final Function()? onSubmit; const EmailInput({ - Key? key, + super.key, required this.controller, this.focusNode, this.onSubmit, - }) : super(key: key); + }); String? _validateInput(String? email) { if (email == null || email == '') return null; @@ -521,11 +521,11 @@ class PasswordInput extends StatelessWidget { final Function()? onSubmit; const PasswordInput({ - Key? key, + super.key, required this.controller, this.focusNode, this.onSubmit, - }) : super(key: key); + }); @override Widget build(BuildContext context) { @@ -554,9 +554,9 @@ class LoginButton extends ConsumerWidget { final Function() onPressed; const LoginButton({ - Key? key, + super.key, required this.onPressed, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { @@ -581,12 +581,12 @@ class OAuthLoginButton extends ConsumerWidget { final Function() onPressed; const OAuthLoginButton({ - Key? key, + super.key, required this.serverEndpointController, required this.isLoading, required this.buttonLabel, required this.onPressed, - }) : super(key: key); + }); @override Widget build(BuildContext context, WidgetRef ref) { @@ -606,7 +606,7 @@ class OAuthLoginButton extends ConsumerWidget { } class LoadingIcon extends StatelessWidget { - const LoadingIcon({Key? key}) : super(key: key); + const LoadingIcon({super.key}); @override Widget build(BuildContext context) { diff --git a/mobile/lib/modules/login/views/change_password_page.dart b/mobile/lib/modules/login/views/change_password_page.dart index 60f3abe291..b475658d1a 100644 --- a/mobile/lib/modules/login/views/change_password_page.dart +++ b/mobile/lib/modules/login/views/change_password_page.dart @@ -5,7 +5,7 @@ import 'package:immich_mobile/modules/login/ui/change_password_form.dart'; @RoutePage() class ChangePasswordPage extends HookConsumerWidget { - const ChangePasswordPage({Key? key}) : super(key: key); + const ChangePasswordPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/login/views/login_page.dart b/mobile/lib/modules/login/views/login_page.dart index ee96b7da61..cb679fa1fc 100644 --- a/mobile/lib/modules/login/views/login_page.dart +++ b/mobile/lib/modules/login/views/login_page.dart @@ -9,7 +9,7 @@ import 'package:package_info_plus/package_info_plus.dart'; @RoutePage() class LoginPage extends HookConsumerWidget { - const LoginPage({Key? key}) : super(key: key); + const LoginPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/map/widgets/positioned_asset_marker_icon.dart b/mobile/lib/modules/map/widgets/positioned_asset_marker_icon.dart index e880bcd44d..cec5114ee1 100644 --- a/mobile/lib/modules/map/widgets/positioned_asset_marker_icon.dart +++ b/mobile/lib/modules/map/widgets/positioned_asset_marker_icon.dart @@ -92,7 +92,7 @@ class _AssetMarkerIcon extends StatelessWidget { "Authorization": "Bearer ${Store.get(StoreKey.accessToken)}", }, - errorListener: () => + errorListener: (_) => const Icon(Icons.image_not_supported_outlined), ), ), diff --git a/mobile/lib/modules/partner/ui/partner_list.dart b/mobile/lib/modules/partner/ui/partner_list.dart index 9e733b1263..83a02f9a81 100644 --- a/mobile/lib/modules/partner/ui/partner_list.dart +++ b/mobile/lib/modules/partner/ui/partner_list.dart @@ -7,7 +7,7 @@ import 'package:immich_mobile/shared/models/user.dart'; import 'package:immich_mobile/shared/ui/user_avatar.dart'; class PartnerList extends HookConsumerWidget { - const PartnerList({Key? key, required this.partner}) : super(key: key); + const PartnerList({super.key, required this.partner}); final List partner; diff --git a/mobile/lib/modules/partner/views/partner_detail_page.dart b/mobile/lib/modules/partner/views/partner_detail_page.dart index e492eef113..0c681162e1 100644 --- a/mobile/lib/modules/partner/views/partner_detail_page.dart +++ b/mobile/lib/modules/partner/views/partner_detail_page.dart @@ -11,7 +11,7 @@ import 'package:immich_mobile/shared/ui/immich_toast.dart'; @RoutePage() class PartnerDetailPage extends HookConsumerWidget { - const PartnerDetailPage({Key? key, required this.partner}) : super(key: key); + const PartnerDetailPage({super.key, required this.partner}); final User partner; diff --git a/mobile/lib/modules/partner/views/partner_page.dart b/mobile/lib/modules/partner/views/partner_page.dart index 4fb3fccf28..6fc34345f6 100644 --- a/mobile/lib/modules/partner/views/partner_page.dart +++ b/mobile/lib/modules/partner/views/partner_page.dart @@ -12,7 +12,7 @@ import 'package:immich_mobile/shared/ui/user_avatar.dart'; @RoutePage() class PartnerPage extends HookConsumerWidget { - const PartnerPage({Key? key}) : super(key: key); + const PartnerPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/search/models/curated_content.dart b/mobile/lib/modules/search/models/curated_content.dart index fbd0d58373..df7cb032c5 100644 --- a/mobile/lib/modules/search/models/curated_content.dart +++ b/mobile/lib/modules/search/models/curated_content.dart @@ -1,5 +1,5 @@ /// A wrapper for [CuratedLocationsResponseDto] objects -/// and [CuratedObjectsResponseDto] to be displayed in +/// and [CuratedObjectsResponseDto] to be displayed in /// a view class CuratedContent { /// The label to show associated with this curated object diff --git a/mobile/lib/modules/search/providers/all_motion_photos.provider.dart b/mobile/lib/modules/search/providers/all_motion_photos.provider.dart index 3782eb6995..09aae142f7 100644 --- a/mobile/lib/modules/search/providers/all_motion_photos.provider.dart +++ b/mobile/lib/modules/search/providers/all_motion_photos.provider.dart @@ -3,10 +3,11 @@ import 'package:immich_mobile/shared/models/asset.dart'; import 'package:immich_mobile/shared/providers/db.provider.dart'; import 'package:isar/isar.dart'; -final allMotionPhotosProvider = FutureProvider>( (ref) async { - return ref.watch(dbProvider) - .assets - .filter() - .livePhotoVideoIdIsNotNull() - .findAll(); +final allMotionPhotosProvider = FutureProvider>((ref) async { + return ref + .watch(dbProvider) + .assets + .filter() + .livePhotoVideoIdIsNotNull() + .findAll(); }); diff --git a/mobile/lib/modules/search/providers/recently_added.provider.dart b/mobile/lib/modules/search/providers/recently_added.provider.dart index 5cac2fc4cf..5b7380979a 100644 --- a/mobile/lib/modules/search/providers/recently_added.provider.dart +++ b/mobile/lib/modules/search/providers/recently_added.provider.dart @@ -3,8 +3,9 @@ import 'package:immich_mobile/shared/models/asset.dart'; import 'package:immich_mobile/shared/providers/db.provider.dart'; import 'package:isar/isar.dart'; -final recentlyAddedProvider = FutureProvider>( (ref) async { - return ref.watch(dbProvider) +final recentlyAddedProvider = FutureProvider>((ref) async { + return ref + .watch(dbProvider) .assets .where() .sortByFileCreatedAtDesc() diff --git a/mobile/lib/modules/search/ui/immich_search_bar.dart b/mobile/lib/modules/search/ui/immich_search_bar.dart index a64ef2fd15..f4fa62d269 100644 --- a/mobile/lib/modules/search/ui/immich_search_bar.dart +++ b/mobile/lib/modules/search/ui/immich_search_bar.dart @@ -8,10 +8,10 @@ import 'package:immich_mobile/modules/search/providers/search_page_state.provide class ImmichSearchBar extends HookConsumerWidget implements PreferredSizeWidget { const ImmichSearchBar({ - Key? key, + super.key, required this.searchFocusNode, required this.onSubmitted, - }) : super(key: key); + }); final FocusNode searchFocusNode; final Function(String) onSubmitted; diff --git a/mobile/lib/modules/search/ui/search_suggestion_list.dart b/mobile/lib/modules/search/ui/search_suggestion_list.dart index b5f5029c30..c9694eb751 100644 --- a/mobile/lib/modules/search/ui/search_suggestion_list.dart +++ b/mobile/lib/modules/search/ui/search_suggestion_list.dart @@ -5,8 +5,7 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/modules/search/providers/search_page_state.provider.dart'; class SearchSuggestionList extends ConsumerWidget { - const SearchSuggestionList({Key? key, required this.onSubmitted}) - : super(key: key); + const SearchSuggestionList({super.key, required this.onSubmitted}); final Function(String) onSubmitted; @override diff --git a/mobile/lib/modules/search/ui/thumbnail_with_info.dart b/mobile/lib/modules/search/ui/thumbnail_with_info.dart index 16714d8306..e9be93ad49 100644 --- a/mobile/lib/modules/search/ui/thumbnail_with_info.dart +++ b/mobile/lib/modules/search/ui/thumbnail_with_info.dart @@ -7,13 +7,13 @@ import 'package:immich_mobile/extensions/string_extensions.dart'; // ignore: must_be_immutable class ThumbnailWithInfo extends StatelessWidget { ThumbnailWithInfo({ - Key? key, + super.key, required this.textInfo, this.imageUrl, this.noImageIcon, this.borderRadius = 10, required this.onTap, - }) : super(key: key); + }); final String textInfo; final String? imageUrl; diff --git a/mobile/lib/modules/search/views/search_page.dart b/mobile/lib/modules/search/views/search_page.dart index 3c11b4093c..d6c556ef6d 100644 --- a/mobile/lib/modules/search/views/search_page.dart +++ b/mobile/lib/modules/search/views/search_page.dart @@ -22,7 +22,7 @@ import 'package:immich_mobile/shared/ui/scaffold_error_body.dart'; @RoutePage() // ignore: must_be_immutable class SearchPage extends HookConsumerWidget { - SearchPage({Key? key}) : super(key: key); + SearchPage({super.key}); FocusNode searchFocusNode = FocusNode(); diff --git a/mobile/lib/modules/search/views/search_result_page.dart b/mobile/lib/modules/search/views/search_result_page.dart index 8bf56042f8..3645a81f1b 100644 --- a/mobile/lib/modules/search/views/search_result_page.dart +++ b/mobile/lib/modules/search/views/search_result_page.dart @@ -28,9 +28,9 @@ SearchType _getSearchType(String searchTerm) { @RoutePage() class SearchResultPage extends HookConsumerWidget { const SearchResultPage({ - Key? key, + super.key, required this.searchTerm, - }) : super(key: key); + }); final String searchTerm; diff --git a/mobile/lib/modules/settings/providers/notification_permission.provider.dart b/mobile/lib/modules/settings/providers/notification_permission.provider.dart index 96a9f97966..608f35d63f 100644 --- a/mobile/lib/modules/settings/providers/notification_permission.provider.dart +++ b/mobile/lib/modules/settings/providers/notification_permission.provider.dart @@ -4,11 +4,12 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:permission_handler/permission_handler.dart'; class NotificationPermissionNotifier extends StateNotifier { - NotificationPermissionNotifier() : - super(Platform.isAndroid - ? PermissionStatus.granted - : PermissionStatus.restricted, - ) { + NotificationPermissionNotifier() + : super( + Platform.isAndroid + ? PermissionStatus.granted + : PermissionStatus.restricted, + ) { // Sets the initial state getNotificationPermission().then((p) => state = p); } @@ -16,9 +17,9 @@ class NotificationPermissionNotifier extends StateNotifier { /// Requests the notification permission /// Note: In Android, this is always granted Future requestNotificationPermission() async { - final permission = await Permission.notification.request(); - state = permission; - return permission; + final permission = await Permission.notification.request(); + state = permission; + return permission; } /// Whether the user has the permission or not @@ -37,8 +38,9 @@ class NotificationPermissionNotifier extends StateNotifier { Future hasOrAskForNotificationPermission() { return requestNotificationPermission().then((p) => p.isGranted); } - } -final notificationPermissionProvider - = StateNotifierProvider - ((ref) => NotificationPermissionNotifier()); + +final notificationPermissionProvider = + StateNotifierProvider( + (ref) => NotificationPermissionNotifier(), +); diff --git a/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_layout_settings.dart b/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_layout_settings.dart index aa3123f3d9..5ac22e131d 100644 --- a/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_layout_settings.dart +++ b/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_layout_settings.dart @@ -9,8 +9,8 @@ import 'package:immich_mobile/modules/settings/services/app_settings.service.dar class LayoutSettings extends HookConsumerWidget { const LayoutSettings({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_settings.dart b/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_settings.dart index c3e0fc8eb0..a2ad73ec8e 100644 --- a/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_settings.dart +++ b/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_settings.dart @@ -7,8 +7,8 @@ import 'asset_list_tiles_per_row.dart'; class AssetListSettings extends StatelessWidget { const AssetListSettings({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context) { diff --git a/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_storage_indicator.dart b/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_storage_indicator.dart index b94635a303..866e0a08fb 100644 --- a/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_storage_indicator.dart +++ b/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_storage_indicator.dart @@ -8,8 +8,8 @@ import 'package:immich_mobile/modules/settings/services/app_settings.service.dar class StorageIndicator extends HookConsumerWidget { const StorageIndicator({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_tiles_per_row.dart b/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_tiles_per_row.dart index e2f2455824..23690f907d 100644 --- a/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_tiles_per_row.dart +++ b/mobile/lib/modules/settings/ui/asset_list_settings/asset_list_tiles_per_row.dart @@ -8,8 +8,8 @@ import 'package:immich_mobile/modules/settings/services/app_settings.service.dar class TilesPerRow extends HookConsumerWidget { const TilesPerRow({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/settings/ui/image_viewer_quality_setting/image_viewer_quality_setting.dart b/mobile/lib/modules/settings/ui/image_viewer_quality_setting/image_viewer_quality_setting.dart index 5c8620473b..bd77043a84 100644 --- a/mobile/lib/modules/settings/ui/image_viewer_quality_setting/image_viewer_quality_setting.dart +++ b/mobile/lib/modules/settings/ui/image_viewer_quality_setting/image_viewer_quality_setting.dart @@ -9,8 +9,8 @@ import 'package:immich_mobile/modules/settings/ui/settings_switch_list_tile.dart class ImageViewerQualitySetting extends HookConsumerWidget { const ImageViewerQualitySetting({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/settings/ui/notification_setting/notification_setting.dart b/mobile/lib/modules/settings/ui/notification_setting/notification_setting.dart index e996ad1ea6..e696c9f1a3 100644 --- a/mobile/lib/modules/settings/ui/notification_setting/notification_setting.dart +++ b/mobile/lib/modules/settings/ui/notification_setting/notification_setting.dart @@ -11,8 +11,8 @@ import 'package:permission_handler/permission_handler.dart'; class NotificationSetting extends HookConsumerWidget { const NotificationSetting({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/settings/ui/theme_setting/theme_setting.dart b/mobile/lib/modules/settings/ui/theme_setting/theme_setting.dart index 0657fa7e00..e8a1453935 100644 --- a/mobile/lib/modules/settings/ui/theme_setting/theme_setting.dart +++ b/mobile/lib/modules/settings/ui/theme_setting/theme_setting.dart @@ -9,8 +9,8 @@ import 'package:immich_mobile/utils/immich_app_theme.dart'; class ThemeSetting extends HookConsumerWidget { const ThemeSetting({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/modules/settings/views/settings_page.dart b/mobile/lib/modules/settings/views/settings_page.dart index e717e0633a..3272dd5521 100644 --- a/mobile/lib/modules/settings/views/settings_page.dart +++ b/mobile/lib/modules/settings/views/settings_page.dart @@ -12,7 +12,7 @@ import 'package:immich_mobile/modules/settings/ui/theme_setting/theme_setting.da @RoutePage() class SettingsPage extends HookConsumerWidget { - const SettingsPage({Key? key}) : super(key: key); + const SettingsPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -43,7 +43,7 @@ class SettingsPage extends HookConsumerWidget { const LocalStorageSettings(), const AdvancedSettings(), ], - ).toList(), + ), ], ), ); diff --git a/mobile/lib/modules/shared_link/views/shared_link_page.dart b/mobile/lib/modules/shared_link/views/shared_link_page.dart index 48b1b257e1..ec0643058d 100644 --- a/mobile/lib/modules/shared_link/views/shared_link_page.dart +++ b/mobile/lib/modules/shared_link/views/shared_link_page.dart @@ -11,7 +11,7 @@ import 'package:immich_mobile/modules/shared_link/ui/shared_link_item.dart'; @RoutePage() class SharedLinkPage extends HookConsumerWidget { - const SharedLinkPage({Key? key}) : super(key: key); + const SharedLinkPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/routing/auth_guard.dart b/mobile/lib/routing/auth_guard.dart index 8022f18e34..6aee9271f4 100644 --- a/mobile/lib/routing/auth_guard.dart +++ b/mobile/lib/routing/auth_guard.dart @@ -13,7 +13,6 @@ class AuthGuard extends AutoRouteGuard { AuthGuard(this._apiService); @override void onNavigation(NavigationResolver resolver, StackRouter router) async { - resolver.next(true); try { diff --git a/mobile/lib/routing/duplicate_guard.dart b/mobile/lib/routing/duplicate_guard.dart index d1291e96fc..217ff1cbf4 100644 --- a/mobile/lib/routing/duplicate_guard.dart +++ b/mobile/lib/routing/duplicate_guard.dart @@ -8,7 +8,9 @@ class DuplicateGuard extends AutoRouteGuard { void onNavigation(NavigationResolver resolver, StackRouter router) async { // Duplicate navigation if (resolver.route.name == router.current.name) { - debugPrint('DuplicateGuard: Preventing duplicate route navigation for ${resolver.route.name}'); + debugPrint( + 'DuplicateGuard: Preventing duplicate route navigation for ${resolver.route.name}', + ); resolver.next(false); } else { resolver.next(true); diff --git a/mobile/lib/shared/models/store.dart b/mobile/lib/shared/models/store.dart index 2faeeed123..f38345e5e5 100644 --- a/mobile/lib/shared/models/store.dart +++ b/mobile/lib/shared/models/store.dart @@ -95,15 +95,15 @@ class StoreValue { T? _extract(StoreKey key) { switch (key.type) { - case int: + case const (int): return intValue as T?; - case bool: + case const (bool): return intValue == null ? null : (intValue! == 1) as T; - case DateTime: + case const (DateTime): return intValue == null ? null : DateTime.fromMicrosecondsSinceEpoch(intValue!) as T; - case String: + case const (String): return strValue as T?; default: if (key.fromDb != null) { @@ -117,16 +117,16 @@ class StoreValue { int? i; String? s; switch (key.type) { - case int: + case const (int): i = value as int?; break; - case bool: + case const (bool): i = value == null ? null : (value == true ? 1 : 0); break; - case DateTime: + case const (DateTime): i = value == null ? null : (value as DateTime).microsecondsSinceEpoch; break; - case String: + case const (String): s = value as String?; break; default: diff --git a/mobile/lib/shared/providers/admin_provider.dart b/mobile/lib/shared/providers/admin_provider.dart index fc1126a92c..baf49025c8 100644 --- a/mobile/lib/shared/providers/admin_provider.dart +++ b/mobile/lib/shared/providers/admin_provider.dart @@ -3,5 +3,5 @@ import 'package:immich_mobile/shared/providers/user.provider.dart'; final isAdminProvider = Provider((ref) { final currentUser = ref.watch(currentUserProvider); - return currentUser?.isAdmin ?? false; // Default to non-admin if no user + return currentUser?.isAdmin ?? false; // Default to non-admin if no user }); diff --git a/mobile/lib/shared/ui/app_bar_dialog/app_bar_profile_info.dart b/mobile/lib/shared/ui/app_bar_dialog/app_bar_profile_info.dart index baae732b16..9e7cceae24 100644 --- a/mobile/lib/shared/ui/app_bar_dialog/app_bar_profile_info.dart +++ b/mobile/lib/shared/ui/app_bar_dialog/app_bar_profile_info.dart @@ -11,8 +11,8 @@ import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart'; class AppBarProfileInfoBox extends HookConsumerWidget { const AppBarProfileInfoBox({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/shared/ui/app_bar_dialog/app_bar_server_info.dart b/mobile/lib/shared/ui/app_bar_dialog/app_bar_server_info.dart index 40b43838e9..e36a887d44 100644 --- a/mobile/lib/shared/ui/app_bar_dialog/app_bar_server_info.dart +++ b/mobile/lib/shared/ui/app_bar_dialog/app_bar_server_info.dart @@ -10,8 +10,8 @@ import 'package:package_info_plus/package_info_plus.dart'; class AppBarServerInfo extends HookConsumerWidget { const AppBarServerInfo({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/shared/ui/asset_grid/multiselect_grid.dart b/mobile/lib/shared/ui/asset_grid/multiselect_grid.dart index 342bc397d3..495f8f2f90 100644 --- a/mobile/lib/shared/ui/asset_grid/multiselect_grid.dart +++ b/mobile/lib/shared/ui/asset_grid/multiselect_grid.dart @@ -30,7 +30,7 @@ import 'package:immich_mobile/utils/selection_handlers.dart'; class MultiselectGrid extends HookConsumerWidget { const MultiselectGrid({ - Key? key, + super.key, required this.renderListProvider, this.onRefresh, this.buildLoadingIndicator, @@ -43,7 +43,7 @@ class MultiselectGrid extends HookConsumerWidget { this.editEnabled = false, this.unarchive = false, this.unfavorite = false, - }) : super(key: key); + }); final ProviderListenable> renderListProvider; final Future Function()? onRefresh; diff --git a/mobile/lib/shared/ui/confirm_dialog.dart b/mobile/lib/shared/ui/confirm_dialog.dart index e08c2ae618..5f24f75d51 100644 --- a/mobile/lib/shared/ui/confirm_dialog.dart +++ b/mobile/lib/shared/ui/confirm_dialog.dart @@ -10,13 +10,13 @@ class ConfirmDialog extends StatelessWidget { final String ok; const ConfirmDialog({ - Key? key, + super.key, required this.onOk, required this.title, required this.content, this.cancel = "delete_dialog_cancel", this.ok = "backup_controller_page_background_battery_info_ok", - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/mobile/lib/shared/ui/drag_sheet.dart b/mobile/lib/shared/ui/drag_sheet.dart index 9c717202d9..45addd0c2e 100644 --- a/mobile/lib/shared/ui/drag_sheet.dart +++ b/mobile/lib/shared/ui/drag_sheet.dart @@ -19,12 +19,12 @@ class CustomDraggingHandle extends StatelessWidget { class ControlBoxButton extends StatelessWidget { const ControlBoxButton({ - Key? key, + super.key, required this.label, required this.iconData, this.onPressed, this.onLongPressed, - }) : super(key: key); + }); final String label; final IconData iconData; diff --git a/mobile/lib/shared/ui/immich_image.dart b/mobile/lib/shared/ui/immich_image.dart index 427e5d11e4..3f1f9092f7 100644 --- a/mobile/lib/shared/ui/immich_image.dart +++ b/mobile/lib/shared/ui/immich_image.dart @@ -8,6 +8,7 @@ import 'package:immich_mobile/shared/models/store.dart'; import 'package:immich_mobile/utils/image_url_builder.dart'; import 'package:photo_manager/photo_manager.dart'; import 'package:openapi/api.dart' as api; +import 'package:photo_manager_image_provider/photo_manager_image_provider.dart'; /// Renders an Asset using local data if available, else remote data class ImmichImage extends StatelessWidget { diff --git a/mobile/lib/shared/ui/immich_loading_indicator.dart b/mobile/lib/shared/ui/immich_loading_indicator.dart index 24eedcd47e..67a2ce7baa 100644 --- a/mobile/lib/shared/ui/immich_loading_indicator.dart +++ b/mobile/lib/shared/ui/immich_loading_indicator.dart @@ -5,9 +5,9 @@ class ImmichLoadingIndicator extends StatelessWidget { final double? borderRadius; const ImmichLoadingIndicator({ - Key? key, + super.key, this.borderRadius, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/mobile/lib/shared/ui/immich_logo.dart b/mobile/lib/shared/ui/immich_logo.dart index 6c560d14cf..c7f318891b 100644 --- a/mobile/lib/shared/ui/immich_logo.dart +++ b/mobile/lib/shared/ui/immich_logo.dart @@ -21,5 +21,4 @@ class ImmichLogo extends StatelessWidget { ), ); } - } diff --git a/mobile/lib/shared/ui/photo_view/photo_view.dart b/mobile/lib/shared/ui/photo_view/photo_view.dart index 7e28732506..c48b8158c0 100644 --- a/mobile/lib/shared/ui/photo_view/photo_view.dart +++ b/mobile/lib/shared/ui/photo_view/photo_view.dart @@ -233,7 +233,7 @@ class PhotoView extends StatefulWidget { /// /// Internally, the image is rendered within an [Image] widget. const PhotoView({ - Key? key, + super.key, required this.imageProvider, required this.index, this.loadingBuilder, @@ -264,8 +264,7 @@ class PhotoView extends StatefulWidget { this.errorBuilder, this.enablePanAlways, }) : child = null, - childSize = null, - super(key: key); + childSize = null; /// Creates a widget that displays a zoomable child. /// @@ -274,7 +273,7 @@ class PhotoView extends StatefulWidget { /// Instead of a [imageProvider], this constructor will receive a [child] and a [childSize]. /// const PhotoView.customChild({ - Key? key, + super.key, required this.child, this.childSize, this.backgroundDecoration, @@ -305,8 +304,7 @@ class PhotoView extends StatefulWidget { imageProvider = null, gaplessPlayback = false, loadingBuilder = null, - index = 0, - super(key: key); + index = 0; /// Given a [imageProvider] it resolves into an zoomable image widget using. It /// is required diff --git a/mobile/lib/shared/ui/photo_view/photo_view_gallery.dart b/mobile/lib/shared/ui/photo_view/photo_view_gallery.dart index 27ac5dc06e..f9a6107cac 100644 --- a/mobile/lib/shared/ui/photo_view/photo_view_gallery.dart +++ b/mobile/lib/shared/ui/photo_view/photo_view_gallery.dart @@ -107,7 +107,7 @@ typedef PhotoViewGalleryBuilder = PhotoViewGalleryPageOptions Function( class PhotoViewGallery extends StatefulWidget { /// Construct a gallery with static items through a list of [PhotoViewGalleryPageOptions]. const PhotoViewGallery({ - Key? key, + super.key, required this.pageOptions, this.loadingBuilder, this.backgroundDecoration, @@ -123,14 +123,13 @@ class PhotoViewGallery extends StatefulWidget { this.customSize, this.allowImplicitScrolling = false, }) : itemCount = null, - builder = null, - super(key: key); + builder = null; /// Construct a gallery with dynamic items. /// /// The builder must return a [PhotoViewGalleryPageOptions]. const PhotoViewGallery.builder({ - Key? key, + super.key, required this.itemCount, required this.builder, this.loadingBuilder, @@ -148,8 +147,7 @@ class PhotoViewGallery extends StatefulWidget { this.allowImplicitScrolling = false, }) : pageOptions = null, assert(itemCount != null), - assert(builder != null), - super(key: key); + assert(builder != null); /// A list of options to describe the items in the gallery final List? pageOptions; diff --git a/mobile/lib/shared/ui/photo_view/src/core/photo_view_core.dart b/mobile/lib/shared/ui/photo_view/src/core/photo_view_core.dart index 7db770bd61..e420421b5e 100644 --- a/mobile/lib/shared/ui/photo_view/src/core/photo_view_core.dart +++ b/mobile/lib/shared/ui/photo_view/src/core/photo_view_core.dart @@ -25,7 +25,7 @@ const _defaultDecoration = BoxDecoration( /// to user gestures, updates to the controller state and mounts the entire PhotoView Layout class PhotoViewCore extends StatefulWidget { const PhotoViewCore({ - Key? key, + super.key, required this.imageProvider, required this.backgroundDecoration, required this.gaplessPlayback, @@ -47,11 +47,10 @@ class PhotoViewCore extends StatefulWidget { required this.filterQuality, required this.disableGestures, required this.enablePanAlways, - }) : customChild = null, - super(key: key); + }) : customChild = null; const PhotoViewCore.customChild({ - Key? key, + super.key, required this.customChild, required this.backgroundDecoration, this.heroAttributes, @@ -73,8 +72,7 @@ class PhotoViewCore extends StatefulWidget { required this.disableGestures, required this.enablePanAlways, }) : imageProvider = null, - gaplessPlayback = false, - super(key: key); + gaplessPlayback = false; final Decoration? backgroundDecoration; final ImageProvider? imageProvider; @@ -359,15 +357,15 @@ class PhotoViewCoreState extends State onScaleStart: onScaleStart, onScaleUpdate: onScaleUpdate, onScaleEnd: onScaleEnd, - onDragStart: widget.onDragStart != null - ? (details) => widget.onDragStart!(context, details, value) - : null, - onDragEnd: widget.onDragEnd != null - ? (details) => widget.onDragEnd!(context, details, value) - : null, + onDragStart: widget.onDragStart != null + ? (details) => widget.onDragStart!(context, details, value) + : null, + onDragEnd: widget.onDragEnd != null + ? (details) => widget.onDragEnd!(context, details, value) + : null, onDragUpdate: widget.onDragUpdate != null - ? (details) => widget.onDragUpdate!(context, details, value) - : null, + ? (details) => widget.onDragUpdate!(context, details, value) + : null, hitDetector: this, onTapUp: widget.onTapUp != null ? (details) => widget.onTapUp!(context, details, value) diff --git a/mobile/lib/shared/ui/photo_view/src/core/photo_view_gesture_detector.dart b/mobile/lib/shared/ui/photo_view/src/core/photo_view_gesture_detector.dart index 201ca20f41..743faa0e0a 100644 --- a/mobile/lib/shared/ui/photo_view/src/core/photo_view_gesture_detector.dart +++ b/mobile/lib/shared/ui/photo_view/src/core/photo_view_gesture_detector.dart @@ -7,7 +7,7 @@ import 'photo_view_hit_corners.dart'; /// for the gist class PhotoViewGestureDetector extends StatelessWidget { const PhotoViewGestureDetector({ - Key? key, + super.key, this.hitDetector, this.onScaleStart, this.onScaleUpdate, @@ -20,7 +20,7 @@ class PhotoViewGestureDetector extends StatelessWidget { this.onTapUp, this.onTapDown, this.behavior, - }) : super(key: key); + }); final GestureDoubleTapCallback? onDoubleTap; final HitCornersDetector? hitDetector; @@ -63,14 +63,14 @@ class PhotoViewGestureDetector extends StatelessWidget { } if (onDragStart != null || onDragEnd != null || onDragUpdate != null) { - gestures[VerticalDragGestureRecognizer] = + gestures[VerticalDragGestureRecognizer] = GestureRecognizerFactoryWithHandlers( () => VerticalDragGestureRecognizer(debugOwner: this), (VerticalDragGestureRecognizer instance) { instance - ..onStart = onDragStart - ..onUpdate = onDragUpdate - ..onEnd = onDragEnd; + ..onStart = onDragStart + ..onUpdate = onDragUpdate + ..onEnd = onDragEnd; }, ); } @@ -86,11 +86,11 @@ class PhotoViewGestureDetector extends StatelessWidget { gestures[PhotoViewGestureRecognizer] = GestureRecognizerFactoryWithHandlers( () => PhotoViewGestureRecognizer( - hitDetector: hitDetector, - debugOwner: this, - validateAxis: axis, - touchSlopFactor: touchSlopFactor, - ), + hitDetector: hitDetector, + debugOwner: this, + validateAxis: axis, + touchSlopFactor: touchSlopFactor, + ), (PhotoViewGestureRecognizer instance) { instance ..onStart = onScaleStart @@ -110,11 +110,11 @@ class PhotoViewGestureDetector extends StatelessWidget { class PhotoViewGestureRecognizer extends ScaleGestureRecognizer { PhotoViewGestureRecognizer({ this.hitDetector, - Object? debugOwner, + super.debugOwner, this.validateAxis, this.touchSlopFactor = 1, PointerDeviceKind? kind, - }) : super(debugOwner: debugOwner, supportedDevices: null); + }) : super(supportedDevices: null); final HitCornersDetector? hitDetector; final Axis? validateAxis; final double touchSlopFactor; @@ -236,11 +236,11 @@ class PhotoViewGestureRecognizer extends ScaleGestureRecognizer { /// ``` class PhotoViewGestureDetectorScope extends InheritedWidget { const PhotoViewGestureDetectorScope({ - super.key, + super.key, this.axis, this.touchSlopFactor = .2, - required Widget child, - }) : super(child: child); + required super.child, + }); static PhotoViewGestureDetectorScope? of(BuildContext context) { final PhotoViewGestureDetectorScope? scope = context @@ -254,11 +254,12 @@ class PhotoViewGestureDetectorScope extends InheritedWidget { // 0: most reactive but will not let tap recognizers accept gestures // <1: less reactive but gives the most leeway to other recognizers // 1: will not be able to compete with a `HorizontalDragGestureRecognizer` up the widget tree - final double touchSlopFactor; + final double touchSlopFactor; @override bool updateShouldNotify(PhotoViewGestureDetectorScope oldWidget) { - return axis != oldWidget.axis && touchSlopFactor != oldWidget.touchSlopFactor; + return axis != oldWidget.axis && + touchSlopFactor != oldWidget.touchSlopFactor; } } @@ -269,16 +270,14 @@ class PhotoViewGestureDetectorScope extends InheritedWidget { class PhotoViewPageViewScrollPhysics extends ScrollPhysics { const PhotoViewPageViewScrollPhysics({ this.touchSlopFactor = 0.1, - ScrollPhysics? parent, - }) : super(parent: parent); - + super.parent, + }); // in [0, 1] // 0: most reactive but will not let PhotoView recognizers accept gestures // 1: less reactive but gives the most leeway to PhotoView recognizers final double touchSlopFactor; - @override PhotoViewPageViewScrollPhysics applyTo(ScrollPhysics? ancestor) { return PhotoViewPageViewScrollPhysics( @@ -287,7 +286,6 @@ class PhotoViewPageViewScrollPhysics extends ScrollPhysics { ); } - @override double get dragStartDistanceMotionThreshold => kTouchSlop * touchSlopFactor; } diff --git a/mobile/lib/shared/ui/photo_view/src/core/photo_view_hit_corners.dart b/mobile/lib/shared/ui/photo_view/src/core/photo_view_hit_corners.dart index 3210aed8e2..615a61e86b 100644 --- a/mobile/lib/shared/ui/photo_view/src/core/photo_view_hit_corners.dart +++ b/mobile/lib/shared/ui/photo_view/src/core/photo_view_hit_corners.dart @@ -26,7 +26,11 @@ mixin HitCornersDetector on PhotoViewControllerDelegate { return HitCorners(y <= cornersY.min, y >= cornersY.max); } - bool _shouldMoveAxis(HitCorners hitCorners, double mainAxisMove, double crossAxisMove) { + bool _shouldMoveAxis( + HitCorners hitCorners, + double mainAxisMove, + double crossAxisMove, + ) { if (mainAxisMove == 0) { return false; } diff --git a/mobile/lib/shared/ui/photo_view/src/photo_view_default_widgets.dart b/mobile/lib/shared/ui/photo_view/src/photo_view_default_widgets.dart index 339463b3f8..a843087bad 100644 --- a/mobile/lib/shared/ui/photo_view/src/photo_view_default_widgets.dart +++ b/mobile/lib/shared/ui/photo_view/src/photo_view_default_widgets.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; class PhotoViewDefaultError extends StatelessWidget { - const PhotoViewDefaultError({Key? key, required this.decoration}) - : super(key: key); + const PhotoViewDefaultError({super.key, required this.decoration}); final BoxDecoration decoration; @@ -22,7 +21,7 @@ class PhotoViewDefaultError extends StatelessWidget { } class PhotoViewDefaultLoading extends StatelessWidget { - const PhotoViewDefaultLoading({Key? key, this.event}) : super(key: key); + const PhotoViewDefaultLoading({super.key, this.event}); final ImageChunkEvent? event; diff --git a/mobile/lib/shared/ui/photo_view/src/photo_view_wrappers.dart b/mobile/lib/shared/ui/photo_view/src/photo_view_wrappers.dart index aefcd4097b..b7f86f8f0c 100644 --- a/mobile/lib/shared/ui/photo_view/src/photo_view_wrappers.dart +++ b/mobile/lib/shared/ui/photo_view/src/photo_view_wrappers.dart @@ -7,7 +7,7 @@ import 'utils/photo_view_utils.dart'; class ImageWrapper extends StatefulWidget { const ImageWrapper({ - Key? key, + super.key, required this.imageProvider, required this.loadingBuilder, required this.backgroundDecoration, @@ -36,7 +36,7 @@ class ImageWrapper extends StatefulWidget { required this.errorBuilder, required this.enablePanAlways, required this.index, - }) : super(key: key); + }); final ImageProvider imageProvider; final LoadingBuilder? loadingBuilder; @@ -237,7 +237,7 @@ class _ImageWrapperState extends State { class CustomChildWrapper extends StatelessWidget { const CustomChildWrapper({ - Key? key, + super.key, this.child, required this.childSize, required this.backgroundDecoration, @@ -263,7 +263,7 @@ class CustomChildWrapper extends StatelessWidget { required this.filterQuality, required this.disableGestures, required this.enablePanAlways, - }) : super(key: key); + }); final Widget? child; final Size? childSize; diff --git a/mobile/lib/shared/ui/photo_view/src/utils/photo_view_utils.dart b/mobile/lib/shared/ui/photo_view/src/utils/photo_view_utils.dart index d8329c7f8e..bd581058de 100644 --- a/mobile/lib/shared/ui/photo_view/src/utils/photo_view_utils.dart +++ b/mobile/lib/shared/ui/photo_view/src/utils/photo_view_utils.dart @@ -17,7 +17,7 @@ double getScaleForScaleState( case PhotoViewScaleState.covering: return _clampSize( _scaleForCovering( - scaleBoundaries.outerSize, + scaleBoundaries.outerSize, scaleBoundaries.childSize, ), scaleBoundaries, diff --git a/mobile/lib/shared/ui/share_dialog.dart b/mobile/lib/shared/ui/share_dialog.dart index d8ea664a6e..1c7eb3580a 100644 --- a/mobile/lib/shared/ui/share_dialog.dart +++ b/mobile/lib/shared/ui/share_dialog.dart @@ -2,7 +2,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; class ShareDialog extends StatelessWidget { - const ShareDialog({Key? key}) : super(key: key); + const ShareDialog({super.key}); @override Widget build(BuildContext context) { @@ -13,8 +13,7 @@ class ShareDialog extends StatelessWidget { const CircularProgressIndicator(), Container( margin: const EdgeInsets.only(top: 12), - child: const Text('share_dialog_preparing') - .tr(), + child: const Text('share_dialog_preparing').tr(), ), ], ), diff --git a/mobile/lib/shared/views/app_log_page.dart b/mobile/lib/shared/views/app_log_page.dart index 514e93d74c..a0c4553f98 100644 --- a/mobile/lib/shared/views/app_log_page.dart +++ b/mobile/lib/shared/views/app_log_page.dart @@ -11,8 +11,8 @@ import 'package:intl/intl.dart'; @RoutePage() class AppLogPage extends HookConsumerWidget { const AppLogPage({ - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/shared/views/splash_screen.dart b/mobile/lib/shared/views/splash_screen.dart index 510c88a7bc..8dddb60aaa 100644 --- a/mobile/lib/shared/views/splash_screen.dart +++ b/mobile/lib/shared/views/splash_screen.dart @@ -13,7 +13,7 @@ import 'package:openapi/api.dart'; @RoutePage() class SplashScreenPage extends HookConsumerWidget { - const SplashScreenPage({Key? key}) : super(key: key); + const SplashScreenPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { diff --git a/mobile/lib/shared/views/tab_controller_page.dart b/mobile/lib/shared/views/tab_controller_page.dart index d1a92c15a3..40850bdb44 100644 --- a/mobile/lib/shared/views/tab_controller_page.dart +++ b/mobile/lib/shared/views/tab_controller_page.dart @@ -13,7 +13,7 @@ import 'package:immich_mobile/shared/providers/tab.provider.dart'; @RoutePage() class TabControllerPage extends HookConsumerWidget { - const TabControllerPage({Key? key}) : super(key: key); + const TabControllerPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -168,15 +168,6 @@ class TabControllerPage extends HookConsumerWidget { ); } - Future returnBackToHome(TabsRouter tabsRouter) async { - bool atHomeTab = tabsRouter.activeIndex == 0; - if (!atHomeTab) { - tabsRouter.setActiveIndex(0); - } - - return atHomeTab; - } - final multiselectEnabled = ref.watch(multiselectProvider); return AutoTabsRouter( routes: [ @@ -192,8 +183,10 @@ class TabControllerPage extends HookConsumerWidget { ), builder: (context, child) { final tabsRouter = AutoTabsRouter.of(context); - return WillPopScope( - onWillPop: () => returnBackToHome(tabsRouter), + return PopScope( + canPop: tabsRouter.activeIndex == 0, + onPopInvoked: (didPop) => + !didPop ? tabsRouter.setActiveIndex(0) : null, child: LayoutBuilder( builder: (context, constraints) { const medium = 600; diff --git a/mobile/lib/utils/bytes_units.dart b/mobile/lib/utils/bytes_units.dart index be9ac13dcb..ea9d0f5cf5 100644 --- a/mobile/lib/utils/bytes_units.dart +++ b/mobile/lib/utils/bytes_units.dart @@ -7,8 +7,7 @@ String formatBytes(int bytes) { if (magnitude + 1 < units.length) { magnitude++; remainder /= 1024; - } - else { + } else { break; } } diff --git a/mobile/lib/utils/debounce.dart b/mobile/lib/utils/debounce.dart index 3432417665..ca5f8fc2be 100644 --- a/mobile/lib/utils/debounce.dart +++ b/mobile/lib/utils/debounce.dart @@ -38,8 +38,8 @@ Debouncer useDebouncer({ class _DebouncerHook extends Hook { const _DebouncerHook({ required this.interval, - List? keys, - }) : super(keys: keys); + super.keys, + }); final Duration interval; diff --git a/mobile/lib/utils/draggable_scroll_controller.dart b/mobile/lib/utils/draggable_scroll_controller.dart index 6e320ad3c9..1d22905d1f 100644 --- a/mobile/lib/utils/draggable_scroll_controller.dart +++ b/mobile/lib/utils/draggable_scroll_controller.dart @@ -18,8 +18,8 @@ DraggableScrollableController useDraggableScrollController({ class _DraggableScrollControllerHook extends Hook { const _DraggableScrollControllerHook({ - List? keys, - }) : super(keys: keys); + super.keys, + }); @override HookState> diff --git a/mobile/lib/utils/http_ssl_cert_override.dart b/mobile/lib/utils/http_ssl_cert_override.dart index 7a36a2e83b..607de561cd 100644 --- a/mobile/lib/utils/http_ssl_cert_override.dart +++ b/mobile/lib/utils/http_ssl_cert_override.dart @@ -11,7 +11,7 @@ class HttpSSLCertOverride extends HttpOverrides { var log = Logger("HttpSSLCertOverride"); AppSettingsEnum setting = AppSettingsEnum.allowSelfSignedSSLCert; - + // Check if user has allowed self signed SSL certificates. bool selfSignedCertsAllowed = Store.get(setting.storeKey as StoreKey, setting.defaultValue); diff --git a/mobile/lib/utils/throttle.dart b/mobile/lib/utils/throttle.dart index 34619e1dc0..9a54e01fc1 100644 --- a/mobile/lib/utils/throttle.dart +++ b/mobile/lib/utils/throttle.dart @@ -34,8 +34,8 @@ Throttler useThrottler({ class _ThrottleHook extends Hook { const _ThrottleHook({ required this.interval, - List? keys, - }) : super(keys: keys); + super.keys, + }); final Duration interval; diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index bbde4ac5cd..b8597853e4 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: "0f7b1783ddb1e4600580b8c00d0ddae5b06ae7f0382bd4fcce5db4df97b618e1" url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "66.0.0" analyzer: - dependency: transitive + dependency: "direct overridden" description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "5e8bdcda061d91da6b034d64d8e4026f355bcb8c3e7a0ac2da1523205a91a737" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.4.0" analyzer_plugin: - dependency: transitive + dependency: "direct overridden" description: name: analyzer_plugin - sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d + sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" url: "https://pub.dev" source: hosted - version: "0.11.2" + version: "0.11.3" ansicolor: dependency: transitive description: @@ -101,34 +101,34 @@ packages: dependency: transitive description: name: build_daemon - sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.1" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: "6c4dd11d05d056e76320b828a1db0fc01ccd376922526f8e9d6c796a5adbac20" + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.4.2" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "10c6bcdbf9d049a0b666702cf1cee4ddfdc38f02a19d35ae392863b47519848b" + sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" url: "https://pub.dev" source: hosted - version: "2.4.6" + version: "2.4.8" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "6d6ee4276b1c5f34f21fdf39425202712d2be82019983d52f351c94aafbc2c41" + sha256: c9e32d21dd6626b5c163d48b037ce906bbe428bc23ab77bcd77bb21e593b6185 url: "https://pub.dev" source: hosted - version: "7.2.10" + version: "7.2.11" built_collection: dependency: transitive description: @@ -141,34 +141,34 @@ packages: dependency: transitive description: name: built_value - sha256: "598a2a682e2a7a90f08ba39c0aaa9374c5112340f0a2e275f61b59389543d166" + sha256: a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6 url: "https://pub.dev" source: hosted - version: "8.6.1" + version: "8.9.0" cached_network_image: dependency: "direct main" description: name: cached_network_image - sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f" url: "https://pub.dev" source: hosted - version: "3.2.3" + version: "3.3.1" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "4.0.0" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + sha256: "42a835caa27c220d1294311ac409a43361088625a4f23c820b006dd9bffb3316" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.1" cancellation_token: dependency: transitive description: @@ -205,10 +205,10 @@ packages: dependency: "direct main" description: name: chewie - sha256: "60701da1f22ed20cd2d40e856fd1f2249dacf5b629d9fa50676443a18a4857b8" + sha256: "3427e469d7cc99536ac4fbaa069b3352c21760263e65ffb4f0e1c054af43a73e" url: "https://pub.dev" source: hosted - version: "1.7.0" + version: "1.7.4" ci: dependency: transitive description: @@ -221,10 +221,10 @@ packages: dependency: transitive description: name: cli_util - sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7 + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.4.1" clock: dependency: transitive description: @@ -237,26 +237,26 @@ packages: dependency: transitive description: name: code_builder - sha256: "4ad01d6e56db961d29661561effde45e519939fdaeb46c351275b182eac70189" + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 url: "https://pub.dev" source: hosted - version: "4.5.0" + version: "4.10.0" collection: dependency: "direct main" description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" connectivity_plus: dependency: "direct main" description: name: connectivity_plus - sha256: "77a180d6938f78ca7d2382d2240eb626c0f6a735d0bfdce227d8ffb80f95c48b" + sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "5.0.2" connectivity_plus_platform_interface: dependency: transitive description: @@ -277,10 +277,10 @@ packages: dependency: transitive description: name: cross_file - sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e url: "https://pub.dev" source: hosted - version: "0.3.3+4" + version: "0.3.3+8" crypto: dependency: transitive description: @@ -301,34 +301,34 @@ packages: dependency: transitive description: name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" custom_lint: dependency: "direct dev" description: name: custom_lint - sha256: f9a828b696930cf8307f9a3617b2b65c9b370e484dc845d69100cadb77506778 + sha256: dfb893ff17c83cf08676c6b64df11d3e53d80590978d7c1fb242afff3ba6dedb url: "https://pub.dev" source: hosted - version: "0.5.6" + version: "0.5.8" custom_lint_builder: dependency: transitive description: name: custom_lint_builder - sha256: c6f656a4d83385fc0656ae60410ed06bb382898c45627bfb8bbaa323aea97883 + sha256: badc07d7737b71e9a9f960f53463f06e09cc6ccdaa1779623015eaf9f9ee8410 url: "https://pub.dev" source: hosted - version: "0.5.6" + version: "0.5.10" custom_lint_core: dependency: transitive description: name: custom_lint_core - sha256: e20a67737adcf0cf2465e734dd624af535add11f9edd1f2d444909b5b0749650 + sha256: bfcc6b518c54d386ad0647ad7a4f415b4db3ea270d09fd9b7f4a1a2df07c3d84 url: "https://pub.dev" source: hosted - version: "0.5.6" + version: "0.5.10" dart_style: dependency: transitive description: @@ -349,18 +349,18 @@ packages: dependency: transitive description: name: dbus - sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" url: "https://pub.dev" source: hosted - version: "0.7.8" + version: "0.7.10" device_info_plus: dependency: "direct main" description: name: device_info_plus - sha256: f52ab3b76b36ede4d135aab80194df8925b553686f0fa12226b4e2d658e45903 + sha256: "0042cb3b2a76413ea5f8a2b40cec2a33e01d0c937e91f0f7c211fde4f7739ba6" url: "https://pub.dev" source: hosted - version: "8.2.2" + version: "9.1.1" device_info_plus_platform_interface: dependency: transitive description: @@ -373,18 +373,18 @@ packages: dependency: "direct main" description: name: easy_image_viewer - sha256: "8d11a4630e9beb7aacf043c98da2dd4b3bc3b47aa4073d2016ba696376161272" + sha256: "6d765e9040a6e625796b387140b95f23318f25a448bf2647af30d17a77cea022" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.4.0" easy_localization: dependency: "direct main" description: name: easy_localization - sha256: "30ebf25448ffe169e0bd9bc4b5da94faa8398967a2ad2ca09f438be8b6953645" + sha256: de63e3b422adfc97f256cbb3f8cf12739b6a4993d390f3cadb3f51837afaefe5 url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" easy_logger: dependency: transitive description: @@ -421,34 +421,34 @@ packages: dependency: transitive description: name: file_selector_linux - sha256: "770eb1ab057b5ae4326d1c24cc57710758b9a46026349d021d6311bd27580046" + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" url: "https://pub.dev" source: hosted - version: "0.9.2" + version: "0.9.2+1" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: "4ada532862917bf16e3adb3891fe3a5917a58bae03293e497082203a80909412" + sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 url: "https://pub.dev" source: hosted - version: "0.9.3+1" + version: "0.9.3+3" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - sha256: "412705a646a0ae90f33f37acfae6a0f7cbc02222d6cd34e479421c3e74d3853c" + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.6.2" file_selector_windows: dependency: transitive description: name: file_selector_windows - sha256: "1372760c6b389842b77156203308940558a2817360154084368608413835fc26" + sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 url: "https://pub.dev" source: hosted - version: "0.9.3" + version: "0.9.3+1" fixnum: dependency: transitive description: @@ -462,14 +462,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_blurhash: - dependency: transitive - description: - name: flutter_blurhash - sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" - url: "https://pub.dev" - source: hosted - version: "0.7.0" flutter_cache_manager: dependency: "direct main" description: @@ -482,10 +474,10 @@ packages: dependency: "direct main" description: name: flutter_displaymode - sha256: fdeaceb35d84ed000625ae0666bbec5b015407d1f90135cdd1bbfdb4ca73de1a + sha256: "42c5e9abd13d28ed74f701b60529d7f8416947e58256e6659c5550db719c57ef" url: "https://pub.dev" source: hosted - version: "0.4.1" + version: "0.6.0" flutter_driver: dependency: transitive description: flutter @@ -495,10 +487,10 @@ packages: dependency: "direct main" description: name: flutter_hooks - sha256: "7c8db779c2d1010aa7f9ea3fbefe8f86524fcb87b69e8b0af31e1a4b55422dec" + sha256: "09f64db63fee3b2ab8b9038a1346be7d8986977fae3fec601275bf32455ccfc0" url: "https://pub.dev" source: hosted - version: "0.20.3" + version: "0.20.4" flutter_launcher_icons: dependency: "direct dev" description: @@ -511,18 +503,18 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4" + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "3.0.1" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - sha256: "3cc40fe8c50ab8383f3e053a499f00f975636622ecdc8e20a77418ece3b1e975" + sha256: c18f1de98fe0bb9dd5ba91e1330d4febc8b6a7de6aae3ffe475ef423723e72f3 url: "https://pub.dev" source: hosted - version: "15.1.0+1" + version: "16.3.2" flutter_local_notifications_linux: dependency: transitive description: @@ -548,26 +540,26 @@ packages: dependency: "direct dev" description: name: flutter_native_splash - sha256: "17d9671396fb8ec45ad10f4a975eb8a0f70bedf0fdaf0720b31ea9de6da8c4da" + sha256: "9cdb5d9665dab5d098dc50feab74301c2c228cd02ca25c9b546ab572cebcd6af" url: "https://pub.dev" source: hosted - version: "2.3.7" + version: "2.3.9" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "950e77c2bbe1692bc0874fc7fb491b96a4dc340457f4ea1641443d0a6c1ea360" + sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da url: "https://pub.dev" source: hosted - version: "2.0.15" + version: "2.0.17" flutter_riverpod: dependency: transitive description: name: flutter_riverpod - sha256: "305203d1578f6857675f9730568548b03900ce53afd319f4aa9d2fa943334dbe" + sha256: da9591d1f8d5881628ccd5c25c40e74fc3eef50ba45e40c3905a06e1712412d5 url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.9" flutter_test: dependency: "direct dev" description: flutter @@ -577,10 +569,10 @@ packages: dependency: "direct main" description: name: flutter_udid - sha256: "3b25da919eee10cc757d47c2c59d96958b86a17418ae3775b7aef090929cfffb" + sha256: "666412097b86d9a6f9803073d0f0ba70de9b198fe6493d89d352a1f8cd6c5c84" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.1" flutter_web_auth: dependency: "direct main" description: @@ -598,10 +590,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "474f7d506230897a3cd28c965ec21c5328ae5605fc9c400cd330e9e9d6ac175c" + sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1 url: "https://pub.dev" source: hosted - version: "8.2.2" + version: "8.2.4" freezed_annotation: dependency: transitive description: @@ -627,50 +619,50 @@ packages: dependency: "direct main" description: name: geolocator - sha256: "9d6eff112971b9f195271834b390fc0e1899a9a6c96225ead72efd5d4aaa80c7" + sha256: e946395fc608842bb2f6c914807e9183f86f3cb787f6b8f832753e5251036f02 url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.1.0" geolocator_android: dependency: transitive description: name: geolocator_android - sha256: "835ff5b4888a2f8eba128996494faf9c5d422785322a81dc0565b99e0f6c379d" + sha256: "30ff8fa384ab6d35965aecc15dfc980e5ebc5f823352c1adfc87dc3d000e8e24" url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.5.0" geolocator_apple: dependency: transitive description: name: geolocator_apple - sha256: "36527c555f4c425f7d8fa8c7c07d67b78e3ff7590d40448051959e1860c1cfb4" + sha256: "79babf44b692ec5e789d322dc736ef71586056e8e6828f747c9e005456b248bf" url: "https://pub.dev" source: hosted - version: "2.2.7" + version: "2.3.5" geolocator_platform_interface: dependency: transitive description: name: geolocator_platform_interface - sha256: af4d69231452f9620718588f41acc4cb58312368716bfff2e92e770b46ce6386 + sha256: "6c8d494d6948757c56720b778af742f6973f31fca1f702a7539b8917e4a2468a" url: "https://pub.dev" source: hosted - version: "4.0.7" + version: "4.2.0" geolocator_web: dependency: transitive description: name: geolocator_web - sha256: f68a122da48fcfff68bbc9846bb0b74ef651afe84a1b1f6ec20939de4d6860e1 + sha256: "59083f7e0871b78299918d92bf930a14377f711d2d1156c558cd5ebae6c20d58" url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.2.0" geolocator_windows: dependency: transitive description: name: geolocator_windows - sha256: "463045515b08bd83f73e014359c4ad063b902eb3899952cfb784497ae6c6583b" + sha256: a92fae29779d5c6dc60e8411302f5221ade464968fe80a36d330e80a71f087af url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.2.2" glob: dependency: transitive description: @@ -691,10 +683,10 @@ packages: dependency: "direct main" description: name: hooks_riverpod - sha256: "2827136ecc0c2abffc3a58e575db6d5b84d159977fa1edc223c97bf566aa8c73" + sha256: c12a456e03ef9be65b0be66963596650ad7a3220e96c7e7b0a048562ea32d6ae url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.9" hotreloader: dependency: transitive description: @@ -747,18 +739,18 @@ packages: dependency: "direct main" description: name: image_picker - sha256: b6951e25b795d053a6ba03af5f710069c99349de9341af95155d52665cb4607c + sha256: "26222b01a0c9a2c8fe02fc90b8208bd3325da5ed1f4a2acabf75939031ac0bdd" url: "https://pub.dev" source: hosted - version: "0.8.9" + version: "1.0.7" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: "8179b54039b50eee561676232304f487602e2950ffb3e8995ed9034d6505ca34" + sha256: "39f2bfe497e495450c81abcd44b62f56c2a36a37a175da7d137b4454977b51b1" url: "https://pub.dev" source: hosted - version: "0.8.7+4" + version: "0.8.9+3" image_picker_for_web: dependency: transitive description: @@ -771,42 +763,42 @@ packages: dependency: transitive description: name: image_picker_ios - sha256: b3e2f21feb28b24dd73a35d7ad6e83f568337c70afab5eabac876e23803f264b + sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3 url: "https://pub.dev" source: hosted - version: "0.8.8" + version: "0.8.9+1" image_picker_linux: dependency: transitive description: name: image_picker_linux - sha256: "02cbc21fe1706b97942b575966e5fbbeaac535e76deef70d3a242e4afb857831" + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.2.1+1" image_picker_macos: dependency: transitive description: name: image_picker_macos - sha256: cee2aa86c56780c13af2c77b5f2f72973464db204569e1ba2dd744459a065af4 + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.2.1+1" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - sha256: c1134543ae2187e85299996d21c526b2f403854994026d575ae4cf30d7bb2a32 + sha256: fa4e815e6fcada50e35718727d83ba1c92f1edf95c0b4436554cec301b56233b url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.9.3" image_picker_windows: dependency: transitive description: name: image_picker_windows - sha256: c3066601ea42113922232c7b7b3330a2d86f029f685bba99d82c30e799914952 + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.2.1+1" integration_test: dependency: "direct dev" description: flutter @@ -872,10 +864,10 @@ packages: dependency: transitive description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "3.0.0" logging: dependency: "direct main" description: @@ -898,7 +890,7 @@ packages: description: path: maplibre_gl_platform_interface ref: main - resolved-ref: acb428a005efd9832a0a8e7ef0945f899dfb3ca5 + resolved-ref: "432020f9ce4ca9b76459990b8dd02cd58f06a44f" url: "https://github.com/maplibre/flutter-maplibre-gl.git" source: git version: "0.18.0" @@ -907,7 +899,7 @@ packages: description: path: maplibre_gl_web ref: main - resolved-ref: acb428a005efd9832a0a8e7ef0945f899dfb3ca5 + resolved-ref: "432020f9ce4ca9b76459990b8dd02cd58f06a44f" url: "https://github.com/maplibre/flutter-maplibre-gl.git" source: git version: "0.18.0" @@ -928,29 +920,29 @@ packages: source: hosted version: "0.5.0" meta: - dependency: transitive + dependency: "direct overridden" description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.11.0" mime: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.5" mocktail: dependency: "direct dev" description: name: mocktail - sha256: bac151b31e4ed78bd59ab89aa4c0928f297b1180186d5daf03734519e5f596c1 + sha256: c4b5007d91ca4f67256e720cb1b6d704e79a510183a12fa551021f652577dce6 url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.3" nested: dependency: transitive description: @@ -971,10 +963,10 @@ packages: dependency: transitive description: name: octo_image - sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "2.0.0" openapi: dependency: "direct main" description: @@ -994,10 +986,10 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "6ff267fcd9d48cb61c8df74a82680e8b82e940231bb5f68356672fde0397334a" + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "5.0.1" package_info_plus_platform_interface: dependency: transitive description: @@ -1018,26 +1010,26 @@ packages: dependency: "direct main" description: name: path_provider - sha256: "909b84830485dbcd0308edf6f7368bc8fd76afa26a270420f34cabea2a6467a0" + sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "5d44fc3314d969b84816b569070d7ace0f1dea04bd94a83f74c4829615d22ad8" + sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.2" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "1b744d3d774e5a879bb76d6cd1ecee2ba2c6960c03b1020cd35212f6aa267ac5" + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" path_provider_ios: dependency: "direct main" description: @@ -1050,106 +1042,122 @@ packages: dependency: transitive description: name: path_provider_linux - sha256: ba2b77f0c52a33db09fc8caf85b12df691bf28d983e84cf87ff6d693cfa007b3 + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: bced5679c7df11190e1ddc35f3222c858f328fff85c3942e46e7f5589bf9eb84 + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: ee0e0d164516b90ae1f970bdf29f726f1aa730d7cfc449ecc74c495378b705da + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" permission_handler: dependency: "direct main" description: name: permission_handler - sha256: "63e5216aae014a72fe9579ccd027323395ce7a98271d9defa9d57320d001af81" + sha256: "45ff3fbcb99040fde55c528d5e3e6ca29171298a85436274d49c6201002087d6" url: "https://pub.dev" source: hosted - version: "10.4.3" + version: "11.2.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: "2ffaf52a21f64ac9b35fe7369bb9533edbd4f698e5604db8645b1064ff4cf221" + sha256: "758284a0976772f9c744d6384fc5dc4834aa61e3f7aa40492927f244767374eb" url: "https://pub.dev" source: hosted - version: "10.3.3" + version: "12.0.3" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: "99e220bce3f8877c78e4ace901082fb29fa1b4ebde529ad0932d8d664b34f3f5" + sha256: c6bf440f80acd2a873d3d91a699e4cc770f86e7e6b576dda98759e8b92b39830 url: "https://pub.dev" source: hosted - version: "9.1.4" + version: "9.3.0" + permission_handler_html: + dependency: transitive + description: + name: permission_handler_html + sha256: "54bf176b90f6eddd4ece307e2c06cf977fb3973719c35a93b85cc7093eb6070d" + url: "https://pub.dev" + source: hosted + version: "0.1.1" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: "7c6b1500385dd1d2ca61bb89e2488ca178e274a69144d26bbd65e33eae7c02a9" + sha256: "5c43148f2bfb6d14c5a8162c0a712afe891f2d847f35fcff29c406b37da43c3c" url: "https://pub.dev" source: hosted - version: "3.11.3" + version: "4.1.0" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098 + sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.2.1" petitparser: dependency: transitive description: name: petitparser - sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "6.0.2" photo_manager: dependency: "direct main" description: name: photo_manager - sha256: "41eaa1d1fa51bac1c8f2f6debfd34074edcc6b330aa96bb3d33c3bc2fc6c8a5c" + sha256: "8cf79918f6de9843b394a1670fe1aec54ebcac852b4b4c9ef88211894547dc61" url: "https://pub.dev" source: hosted - version: "2.7.2" + version: "3.0.0-dev.5" + photo_manager_image_provider: + dependency: "direct main" + description: + name: photo_manager_image_provider + sha256: c187f60c3fdbe5630735d9a0bccbb071397ec03dcb1ba6085c29c8adece798a0 + url: "https://pub.dev" + source: hosted + version: "2.1.0" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.2" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "43798d895c929056255600343db8f049921cbec94d31ec87f1dc5c16c01935dd" + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.1.8" pointycastle: dependency: transitive description: name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" url: "https://pub.dev" source: hosted - version: "3.7.3" + version: "3.7.4" pool: dependency: transitive description: @@ -1170,10 +1178,10 @@ packages: dependency: transitive description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.1" pub_semver: dependency: transitive description: @@ -1194,42 +1202,42 @@ packages: dependency: transitive description: name: riverpod - sha256: "2e84315036e64c59affaff7443dea51247bc2fe704461a32f26a27986fb63d55" + sha256: "942999ee48b899f8a46a860f1e13cee36f2f77609eb54c5b7a669bb20d550b11" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.9" riverpod_analyzer_utils: dependency: transitive description: name: riverpod_analyzer_utils - sha256: d72d7096964baf288b55619fe48100001fc4564ab7923ed0a7f5c7650e03c0d6 + sha256: d4dabc35358413bf4611fcb6abb46308a67c4ef4cd5e69fd3367b11925c59f57 url: "https://pub.dev" source: hosted - version: "0.3.4" + version: "0.5.0" riverpod_annotation: dependency: "direct main" description: name: riverpod_annotation - sha256: "9330309e4400f40e39a2a1d1c340e775d0fd23451cf2dd2286e03c7896fd2bd5" + sha256: b70e95fbd5ca7ce42f5148092022971bb2e9843b6ab71e97d479e8ab52e98979 url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.3" riverpod_generator: dependency: "direct dev" description: name: riverpod_generator - sha256: "5b36ad2f2b562cffb37212e8d59390b25499bf045b732276e30a207b16a25f61" + sha256: ff8f064f1d7ef3cc6af481bba8e9a3fcdb4d34df34fac1b39bbc003167065be0 url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.3.9" riverpod_lint: dependency: "direct dev" description: name: riverpod_lint - sha256: "70198738c3047ae4f6517ef1a2011a8514a980a52576c7f629a3a08810319a02" + sha256: "944929ef82c9bfeaa455ccab97920abcf847a0ffed5c9f6babc520a95db25176" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.3.7" rxdart: dependency: transitive description: @@ -1250,74 +1258,74 @@ packages: dependency: "direct main" description: name: share_plus - sha256: "6cec740fa0943a826951223e76218df002804adb588235a8910dc3d6b0654e11" + sha256: f74fc3f1cbd99f39760182e176802f693fa0ec9625c045561cfad54681ea93dd url: "https://pub.dev" source: hosted - version: "7.1.0" + version: "7.2.1" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - sha256: "357412af4178d8e11d14f41723f80f12caea54cf0d5cd29af9dcdab85d58aea7" + sha256: df08bc3a07d01f5ea47b45d03ffcba1fa9cd5370fb44b3f38c70e42cced0f956 url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "3.3.1" shared_preferences: dependency: transitive description: name: shared_preferences - sha256: "0344316c947ffeb3a529eac929e1978fcd37c26be4e8468628bac399365a3ca1" + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076 + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: d29753996d8eb8f7619a1f13df6ce65e34bc107bef6330739ed76f18b22310ef + sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.3.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1" + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1" + sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a" + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" shelf: dependency: transitive description: @@ -1359,10 +1367,10 @@ packages: dependency: transitive description: name: source_gen - sha256: fc0da689e5302edb6177fdd964efcb7f58912f43c28c2047a808f5bfff643d16 + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.5.0" source_span: dependency: transitive description: @@ -1371,30 +1379,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqflite: dependency: transitive description: name: sqflite - sha256: "591f1602816e9c31377d5f008c2d9ef7b8aca8941c3f89cc5fd9d84da0c38a9a" + sha256: c2c32eb0c74021d987336522acc3b6bf0082fbd0c540c36a9cf4ddb8ba891ddc url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.1" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "1b92f368f44b0dee2425bb861cfa17b6f6cf3961f762ff6f941d20b33355660a" + sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5" url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.5.3" stack_trace: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" state_notifier: dependency: transitive description: @@ -1407,10 +1423,10 @@ packages: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -1439,10 +1455,10 @@ packages: dependency: transitive description: name: synchronized - sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.0+1" term_glyph: dependency: transitive description: @@ -1455,18 +1471,18 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" time: dependency: transitive description: name: time - sha256: "83427e11d9072e038364a5e4da559e85869b227cf699a541be0da74f14140124" + sha256: ad8e018a6c9db36cb917a031853a1aae49467a93e0d464683e029537d848c221 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" timezone: dependency: "direct main" description: @@ -1503,74 +1519,74 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "781bd58a1eb16069412365c98597726cd8810ae27435f04b3b4d3a470bacd61e" + sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c url: "https://pub.dev" source: hosted - version: "6.1.12" + version: "6.2.4" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "3dd2388cc0c42912eee04434531a26a82512b9cb1827e0214430c9bcbddfe025" + sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f" url: "https://pub.dev" source: hosted - version: "6.0.38" + version: "6.2.2" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "6.2.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.1.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "1c4fdc0bfea61a70792ce97157e5cc17260f61abbe4f39354513f39ec6fd73b1" + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.1.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea + sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.3.1" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: cc26720eefe98c1b71d85f9dc7ef0cada5132617046369d9dc296b3ecaa5cbb4 + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b url: "https://pub.dev" source: hosted - version: "2.0.18" + version: "2.2.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "7967065dd2b5fccc18c653b97958fdf839c5478c28e767c61ee879f4e7882422" + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "3.1.1" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.3.3" vector_math: dependency: transitive description: @@ -1583,58 +1599,58 @@ packages: dependency: "direct main" description: name: video_player - sha256: "3fd106c74da32f336dc7feb65021da9b0207cb3124392935f1552834f7cce822" + sha256: fbf28ce8bcfe709ad91b5789166c832cb7a684d14f571a81891858fefb5bb1c2 url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.8.2" video_player_android: dependency: transitive description: name: video_player_android - sha256: f338a5a396c845f4632959511cad3542cdf3167e1b2a1a948ef07f7123c03608 + sha256: "7f8f25d7ad56819a82b2948357f3c3af071f6a678db33833b26ec36bbc221316" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.11" video_player_avfoundation: dependency: transitive description: name: video_player_avfoundation - sha256: f5f5b7fe8c865be8a57fe80c2dca130772e1db775b7af4e5c5aa1905069cfc6c + sha256: "309e3962795e761be010869bae65c0b0e45b5230c5cee1bec72197ca7db040ed" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.5.6" video_player_platform_interface: dependency: transitive description: name: video_player_platform_interface - sha256: "1ca9acd7a0fb15fb1a990cb554e6f004465c6f37c99d2285766f08a4b2802988" + sha256: "236454725fafcacf98f0f39af0d7c7ab2ce84762e3b63f2cbb3ef9a7e0550bc6" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.2.2" video_player_web: dependency: transitive description: name: video_player_web - sha256: "44ce41424d104dfb7cf6982cc6b84af2b007a24d126406025bf40de5d481c74c" + sha256: "34beb3a07d4331a24f7e7b2f75b8e2b103289038e07e65529699a671b6a6e2cb" url: "https://pub.dev" source: hosted - version: "2.0.16" + version: "2.1.3" vm_service: dependency: transitive description: name: vm_service - sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f + sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 url: "https://pub.dev" source: hosted - version: "11.7.1" + version: "11.10.0" wakelock_plus: dependency: "direct main" description: name: wakelock_plus - sha256: aac3f3258f01781ec9212df94eecef1eb9ba9350e106728def405baa096ba413 + sha256: f268ca2116db22e57577fb99d52515a24bdc1d570f12ac18bb762361d43b043d url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.4" wakelock_plus_platform_interface: dependency: transitive description: @@ -1655,10 +1671,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1683,22 +1699,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.4" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "1c52f994bdccb77103a6231ad4ea331a244dbcef5d1f37d8462f713143b0bfae" + url: "https://pub.dev" + source: hosted + version: "1.1.0" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: f0c26453a2d47aa4c2570c6a033246a3fc62da2fe23c7ffdd0a7495086dc0247 + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.4" xml: dependency: transitive description: name: xml - sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.5.0" xxh3: dependency: transitive description: @@ -1716,5 +1740,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" - flutter: ">=3.13.0" + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.16.0" diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index d538d11bcf..9185712127 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -13,58 +13,66 @@ dependencies: sdk: flutter path_provider_ios: - photo_manager: ^2.7.2 - flutter_hooks: ^0.20.3 - hooks_riverpod: ^2.4.0 - riverpod_annotation: ^2.3.0 - cached_network_image: ^3.2.2 - flutter_cache_manager: ^3.3.0 + # TODO: change to stable after 3.16 support + photo_manager: ^3.0.0-dev.5 + photo_manager_image_provider: ^2.1.0 + flutter_hooks: ^0.20.4 + hooks_riverpod: ^2.4.9 + riverpod_annotation: ^2.3.3 + cached_network_image: ^3.3.1 + flutter_cache_manager: ^3.3.1 intl: ^0.18.0 - auto_route: ^7.0.0 - fluttertoast: ^8.2.2 - video_player: ^2.2.18 - chewie: ^1.4.0 - socket_io_client: ^2.0.0-beta.4-nullsafety.0 - # Update it to tag once next stable release + auto_route: ^7.8.4 + fluttertoast: ^8.2.4 + video_player: ^2.8.2 + chewie: ^1.7.4 + socket_io_client: ^2.0.3+1 + # TODO: Update it to tag once next stable release maplibre_gl: git: url: https://github.com/maplibre/flutter-maplibre-gl.git ref: acb428a005efd9832a0a8e7ef0945f899dfb3ca5 - geolocator: ^10.0.0 # used to move to current location in map view - flutter_udid: ^2.0.0 - package_info_plus: ^4.1.0 - url_launcher: ^6.1.3 + geolocator: ^10.1.0 # used to move to current location in map view + flutter_udid: ^2.1.1 + package_info_plus: ^5.0.1 + url_launcher: ^6.2.4 http: 0.13.5 cancellation_token_http: ^1.1.0 - easy_localization: ^3.0.1 - share_plus: ^7.1.0 - flutter_displaymode: ^0.4.0 + easy_localization: ^3.0.3 + share_plus: ^7.2.1 + flutter_displaymode: ^0.6.0 scrollable_positioned_list: ^0.3.8 - path: ^1.8.1 - path_provider: ^2.0.11 - collection: ^1.16.0 - http_parser: ^4.0.1 + path: ^1.8.3 + path_provider: ^2.1.2 + collection: ^1.18.0 + http_parser: ^4.0.2 flutter_web_auth: ^0.5.0 - easy_image_viewer: ^1.2.0 + easy_image_viewer: ^1.4.0 isar: *isar_version isar_flutter_libs: *isar_version # contains Isar Core - permission_handler: ^10.2.0 - device_info_plus: ^8.1.0 - connectivity_plus: ^4.0.1 - wakelock_plus: ^1.1.1 - flutter_local_notifications: ^15.1.0+1 + permission_handler: ^11.2.0 + device_info_plus: ^9.1.1 + connectivity_plus: ^5.0.2 + wakelock_plus: ^1.1.4 + flutter_local_notifications: ^16.3.2 timezone: ^0.9.2 openapi: path: openapi # easy to remove packages: - image_picker: ^0.8.5+3 # only used to select user profile image from system gallery -> we can simply select an image from within immich? - logging: ^1.1.0 + image_picker: ^1.0.7 # only used to select user profile image from system gallery -> we can simply select an image from within immich? + logging: ^1.2.0 # This is uncommented in F-Droid build script # Taken from https://github.com/Myzel394/locus/blob/445013d22ec1d759027d4303bd65b30c5c8588c8/pubspec.yaml#L105 -#fdependency_overrides: +dependency_overrides: + # TODO: remove once Isar is updated + analyzer: ^6.3.0 + # TODO: remove once analyzer override is removed + meta: ^1.11.0 + # TODO: remove once analyzer override is removed + analyzer_plugin: ^0.11.3 #f geolocator_android: #f git: #f url: https://github.com/Zverik/flutter-geolocator.git @@ -74,18 +82,18 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^2.0.1 - build_runner: ^2.2.1 - auto_route_generator: ^7.0.0 + flutter_lints: ^3.0.1 + build_runner: ^2.4.8 + auto_route_generator: ^7.3.2 flutter_launcher_icons: ^0.13.1 - flutter_native_splash: ^2.2.16 + flutter_native_splash: ^2.3.9 isar_generator: *isar_version integration_test: sdk: flutter - custom_lint: ^0.5.6 - riverpod_lint: ^2.1.0 - riverpod_generator: ^2.3.3 - mocktail: ^1.0.1 + custom_lint: ^0.5.8 + riverpod_lint: ^2.3.7 + riverpod_generator: ^2.3.9 + mocktail: ^1.0.3 flutter: uses-material-design: true diff --git a/mobile/test/modules/activity/activity_provider_test.dart b/mobile/test/modules/activity/activity_provider_test.dart index 9e8559839e..c9d6267b92 100644 --- a/mobile/test/modules/activity/activity_provider_test.dart +++ b/mobile/test/modules/activity/activity_provider_test.dart @@ -73,7 +73,7 @@ void main() { listener = ListenerMock(); container.listen( provider, - listener, + listener.call, fireImmediately: true, ); diff --git a/mobile/test/modules/activity/activity_statistics_provider_test.dart b/mobile/test/modules/activity/activity_statistics_provider_test.dart index be147d201d..5e85bf38cb 100644 --- a/mobile/test/modules/activity/activity_statistics_provider_test.dart +++ b/mobile/test/modules/activity/activity_statistics_provider_test.dart @@ -32,7 +32,7 @@ void main() { container.listen( activityStatisticsProvider('test-album', 'test-asset'), - listener, + listener.call, fireImmediately: true, ); @@ -55,7 +55,7 @@ void main() { final provider = activityStatisticsProvider('test-album'); container.listen( provider, - listener, + listener.call, fireImmediately: true, ); @@ -76,7 +76,7 @@ void main() { final provider = activityStatisticsProvider('new-album', 'test-asset'); container.listen( provider, - listener, + listener.call, fireImmediately: true, ); diff --git a/mobile/test/modules/album/album_sort_by_options_provider_test.dart b/mobile/test/modules/album/album_sort_by_options_provider_test.dart index e42dccaa47..d7e28da3d9 100644 --- a/mobile/test/modules/album/album_sort_by_options_provider_test.dart +++ b/mobile/test/modules/album/album_sort_by_options_provider_test.dart @@ -253,7 +253,7 @@ void main() { final listener = ListenerMock(); container.listen( albumSortByOptionsProvider, - listener, + listener.call, fireImmediately: true, ); @@ -318,7 +318,7 @@ void main() { final listener = ListenerMock(); container.listen( albumSortOrderProvider, - listener, + listener.call, fireImmediately: true, );