From 12f7b2a005e8534a3b3c0d87cfe69e76edf1ed73 Mon Sep 17 00:00:00 2001 From: shenlong <139912620+shenlong-tanwen@users.noreply.github.com> Date: Tue, 12 May 2026 00:47:24 +0700 Subject: [PATCH] chore: add always_put_control_body_on_new_line lint (#28352) Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> --- mobile/analysis_options.yaml | 2 + mobile/bin/generate_keys.dart | 12 +++- .../lib/domain/models/album/album.model.dart | 8 ++- .../models/album/local_album.model.dart | 8 ++- .../domain/models/asset/base_asset.model.dart | 16 +++-- .../models/asset/local_asset.model.dart | 8 ++- .../models/asset/remote_asset.model.dart | 16 +++-- .../lib/domain/models/asset_face.model.dart | 4 +- mobile/lib/domain/models/exif.model.dart | 4 +- mobile/lib/domain/models/log.model.dart | 4 +- mobile/lib/domain/models/map.model.dart | 4 +- mobile/lib/domain/models/memory.model.dart | 9 ++- mobile/lib/domain/models/metadata_key.dart | 12 +++- mobile/lib/domain/models/person.model.dart | 8 ++- .../domain/models/search_result.model.dart | 4 +- mobile/lib/domain/models/stack.model.dart | 8 ++- mobile/lib/domain/models/store.model.dart | 4 +- mobile/lib/domain/models/tag.model.dart | 4 +- mobile/lib/domain/models/user.model.dart | 8 ++- .../domain/models/user_metadata.model.dart | 16 +++-- .../domain/services/remote_album.service.dart | 4 +- mobile/lib/domain/services/store.service.dart | 4 +- .../domain/services/sync_stream.service.dart | 8 ++- mobile/lib/domain/services/user.service.dart | 4 +- mobile/lib/extensions/scroll_extensions.dart | 8 ++- .../infrastructure/loaders/image_request.dart | 8 ++- .../loaders/local_image_request.dart | 4 +- .../loaders/remote_image_request.dart | 4 +- .../repositories/api.repository.dart | 4 +- .../repositories/metadata.repository.dart | 12 +++- .../repositories/remote_album.repository.dart | 4 +- .../repositories/user.repository.dart | 4 +- .../repositories/user_api.repository.dart | 4 +- .../lib/models/activities/activity.model.dart | 4 +- mobile/lib/models/auth/auth_state.model.dart | 4 +- .../models/auth/auxilary_endpoint.model.dart | 8 ++- .../models/auth/biometric_status.model.dart | 4 +- .../lib/models/cast/cast_manager_state.dart | 4 +- .../models/download/download_state.model.dart | 8 ++- .../download/livephotos_medatada.model.dart | 4 +- mobile/lib/models/map/map_marker.model.dart | 4 +- mobile/lib/models/map/map_state.model.dart | 4 +- .../search/search_curated_content.model.dart | 4 +- .../models/search/search_filter.model.dart | 24 +++++-- .../server_info/server_config.model.dart | 4 +- .../server_info/server_disk_info.model.dart | 4 +- .../server_info/server_features.model.dart | 4 +- .../models/server_info/server_info.model.dart | 4 +- .../upload/share_intent_attachment.model.dart | 4 +- .../lib/pages/backup/drift_backup.page.dart | 4 +- .../drift_backup_album_selection.page.dart | 4 +- .../backup/drift_upload_detail.page.dart | 4 +- .../pages/common/headers_settings.page.dart | 4 +- .../lib/pages/library/folder/folder.page.dart | 8 ++- .../library/shared_link/shared_link.page.dart | 4 +- .../pages/drift_asset_troubleshoot.page.dart | 8 ++- .../pages/drift_remote_album.page.dart | 4 +- .../pages/edit/drift_edit.page.dart | 4 +- .../pages/edit/editor.provider.dart | 4 +- .../profile/profile_picture_crop.page.dart | 12 +++- .../pages/search/drift_search.page.dart | 8 ++- .../search/paginated_search.provider.dart | 4 +- .../add_action_button.widget.dart | 4 +- .../archive_action_button.widget.dart | 4 +- .../delete_action_button.widget.dart | 4 +- ...delete_permanent_action_button.widget.dart | 4 +- ...e_to_lock_folder_action_button.widget.dart | 4 +- .../unarchive_action_button.widget.dart | 4 +- .../appears_in_details.widget.dart | 12 +++- .../asset_details/rating_details.widget.dart | 4 +- .../technical_details.widget.dart | 16 +++-- .../asset_viewer/asset_page.widget.dart | 56 +++++++++++---- .../widgets/asset_viewer/asset_preloader.dart | 8 ++- .../asset_viewer/asset_viewer.page.dart | 40 ++++++++--- .../asset_viewer/rating_bar.widget.dart | 4 +- .../asset_viewer/video_viewer.widget.dart | 70 ++++++++++++++----- .../widgets/images/local_image_provider.dart | 12 +++- .../widgets/images/remote_image_provider.dart | 8 ++- .../widgets/images/thumb_hash_provider.dart | 4 +- .../widgets/images/thumbnail.widget.dart | 12 +++- .../widgets/memory/memory_card.widget.dart | 4 +- .../widgets/search/quick_date_picker.dart | 8 ++- .../widgets/timeline/fixed/row.dart | 16 +++-- .../widgets/timeline/fixed/segment.model.dart | 16 +++-- .../widgets/timeline/scrubber.widget.dart | 4 +- .../widgets/timeline/segment.model.dart | 4 +- .../widgets/timeline/timeline.widget.dart | 12 +++- .../timeline/timeline_drag_region.dart | 28 ++++++-- .../providers/app_life_cycle.provider.dart | 4 +- .../asset_viewer/asset_viewer.provider.dart | 16 +++-- .../asset_viewer/video_player_provider.dart | 60 ++++++++++++---- .../backup/drift_backup.provider.dart | 8 ++- mobile/lib/providers/cleanup.provider.dart | 4 +- .../infrastructure/action.provider.dart | 4 +- .../infrastructure/remote_album.provider.dart | 4 +- .../user_metadata.provider.dart | 4 +- .../search/search_filter.provider.dart | 4 +- .../lib/providers/sync_status.provider.dart | 4 +- .../timeline/multiselect.provider.dart | 12 +++- .../upload_profile_image.provider.dart | 4 +- mobile/lib/providers/websocket.provider.dart | 8 ++- mobile/lib/repositories/api.repository.dart | 4 +- .../lib/repositories/auth_api.repository.dart | 4 +- .../lib/repositories/upload.repository.dart | 4 +- mobile/lib/services/api.service.dart | 4 +- .../services/background_upload.service.dart | 4 +- mobile/lib/services/deep_link.service.dart | 4 +- mobile/lib/services/folder.service.dart | 4 +- mobile/lib/utils/bytes_units.dart | 4 +- mobile/lib/utils/migration.dart | 28 ++++++-- mobile/lib/utils/semver.dart | 4 +- mobile/lib/utils/url_helper.dart | 12 +++- .../widgets/activities/comment_bubble.dart | 4 +- .../widgets/asset_viewer/video_controls.dart | 8 ++- .../lib/widgets/common/date_time_picker.dart | 4 +- .../lib/widgets/forms/login/login_form.dart | 16 +++-- .../search_filter/star_rating_picker.dart | 4 +- .../drift_backup_settings.dart | 4 +- .../settings/free_up_space_settings.dart | 4 +- .../settings/settings_switch_list_tile.dart | 4 +- mobile/lib/wm_executor.dart | 16 +++-- .../packages/ui/test/formatted_text_test.dart | 4 +- 122 files changed, 774 insertions(+), 263 deletions(-) diff --git a/mobile/analysis_options.yaml b/mobile/analysis_options.yaml index fafd1f40ec..7c49052fc2 100644 --- a/mobile/analysis_options.yaml +++ b/mobile/analysis_options.yaml @@ -34,6 +34,7 @@ linter: unrelated_type_equality_checks: true prefer_const_constructors: true always_use_package_imports: true + always_put_control_body_on_new_line: true # Additional information about this file can be found at # https://dart.dev/guides/language/analysis-options @@ -50,6 +51,7 @@ analyzer: # - custom_lint errors: unawaited_futures: warning + always_put_control_body_on_new_line: warning custom_lint: rules: diff --git a/mobile/bin/generate_keys.dart b/mobile/bin/generate_keys.dart index 3c5c284c3e..a4cf562bcb 100644 --- a/mobile/bin/generate_keys.dart +++ b/mobile/bin/generate_keys.dart @@ -217,7 +217,9 @@ List _extractParams(String value) { final icuType = match.group(2)!; final icuContent = match.group(3) ?? ''; - if (params.containsKey(name)) continue; + if (params.containsKey(name)) { + continue; + } String type; if (icuType == 'plural' || icuType == 'number') { @@ -238,7 +240,9 @@ List _extractParams(String value) { for (var i = 0; i < value.length; i++) { if (value[i] == '{') { - if (depth == 0) icuStart = i; + if (depth == 0) { + icuStart = i; + } depth++; } else if (value[i] == '}') { depth--; @@ -256,7 +260,9 @@ List _extractParams(String value) { for (final match in simpleRegex.allMatches(cleanedValue)) { final name = match.group(1)!; - if (params.containsKey(name)) continue; + if (params.containsKey(name)) { + continue; + } String type; if (_kIntParamNames.contains(name.toLowerCase())) { diff --git a/mobile/lib/domain/models/album/album.model.dart b/mobile/lib/domain/models/album/album.model.dart index ef67d729ec..63f4ed6be3 100644 --- a/mobile/lib/domain/models/album/album.model.dart +++ b/mobile/lib/domain/models/album/album.model.dart @@ -61,8 +61,12 @@ class RemoteAlbum { @override bool operator ==(Object other) { - if (other is! RemoteAlbum) return false; - if (identical(this, other)) return true; + if (other is! RemoteAlbum) { + return false; + } + if (identical(this, other)) { + return true; + } return id == other.id && name == other.name && ownerId == other.ownerId && diff --git a/mobile/lib/domain/models/album/local_album.model.dart b/mobile/lib/domain/models/album/local_album.model.dart index ea06118aa1..9e8521fa02 100644 --- a/mobile/lib/domain/models/album/local_album.model.dart +++ b/mobile/lib/domain/models/album/local_album.model.dart @@ -49,8 +49,12 @@ class LocalAlbum { @override bool operator ==(Object other) { - if (other is! LocalAlbum) return false; - if (identical(this, other)) return true; + if (other is! LocalAlbum) { + return false; + } + if (identical(this, other)) { + return true; + } return other.id == id && other.name == name && diff --git a/mobile/lib/domain/models/asset/base_asset.model.dart b/mobile/lib/domain/models/asset/base_asset.model.dart index 15f705c65b..418b124930 100644 --- a/mobile/lib/domain/models/asset/base_asset.model.dart +++ b/mobile/lib/domain/models/asset/base_asset.model.dart @@ -51,12 +51,18 @@ sealed class BaseAsset { bool get isAnimatedImage => playbackStyle == AssetPlaybackStyle.imageAnimated; AssetPlaybackStyle get playbackStyle { - if (isVideo) return AssetPlaybackStyle.video; - if (isMotionPhoto) return AssetPlaybackStyle.livePhoto; + if (isVideo) { + return AssetPlaybackStyle.video; + } + if (isMotionPhoto) { + return AssetPlaybackStyle.livePhoto; + } if (isImage && durationMs != null && durationMs! > 0) { return AssetPlaybackStyle.imageAnimated; } - if (isImage) return AssetPlaybackStyle.image; + if (isImage) { + return AssetPlaybackStyle.image; + } return AssetPlaybackStyle.unknown; } @@ -98,7 +104,9 @@ sealed class BaseAsset { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } if (other is BaseAsset) { return name == other.name && type == other.type && diff --git a/mobile/lib/domain/models/asset/local_asset.model.dart b/mobile/lib/domain/models/asset/local_asset.model.dart index 04aa6cd846..04f0ae6c8c 100644 --- a/mobile/lib/domain/models/asset/local_asset.model.dart +++ b/mobile/lib/domain/models/asset/local_asset.model.dart @@ -74,8 +74,12 @@ class LocalAsset extends BaseAsset { // Not checking for remoteId here @override bool operator ==(Object other) { - if (other is! LocalAsset) return false; - if (identical(this, other)) return true; + if (other is! LocalAsset) { + return false; + } + if (identical(this, other)) { + return true; + } return super == other && id == other.id && cloudId == other.cloudId && diff --git a/mobile/lib/domain/models/asset/remote_asset.model.dart b/mobile/lib/domain/models/asset/remote_asset.model.dart index 36dc6242e1..ee7f3116e2 100644 --- a/mobile/lib/domain/models/asset/remote_asset.model.dart +++ b/mobile/lib/domain/models/asset/remote_asset.model.dart @@ -71,8 +71,12 @@ class RemoteAsset extends BaseAsset { // Not checking for localId here @override bool operator ==(Object other) { - if (other is! RemoteAsset) return false; - if (identical(this, other)) return true; + if (other is! RemoteAsset) { + return false; + } + if (identical(this, other)) { + return true; + } return super == other && id == other.id && ownerId == other.ownerId && @@ -158,8 +162,12 @@ class RemoteAssetExif extends RemoteAsset { @override bool operator ==(Object other) { - if (other is! RemoteAssetExif) return false; - if (identical(this, other)) return true; + if (other is! RemoteAssetExif) { + return false; + } + if (identical(this, other)) { + return true; + } return super == other && exifInfo == other.exifInfo; } diff --git a/mobile/lib/domain/models/asset_face.model.dart b/mobile/lib/domain/models/asset_face.model.dart index f432b923e3..1388836946 100644 --- a/mobile/lib/domain/models/asset_face.model.dart +++ b/mobile/lib/domain/models/asset_face.model.dart @@ -68,7 +68,9 @@ class AssetFace { @override bool operator ==(covariant AssetFace other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && other.assetId == assetId && diff --git a/mobile/lib/domain/models/exif.model.dart b/mobile/lib/domain/models/exif.model.dart index 97c0ba3823..4284aef2ab 100644 --- a/mobile/lib/domain/models/exif.model.dart +++ b/mobile/lib/domain/models/exif.model.dart @@ -69,7 +69,9 @@ class ExifInfo { @override bool operator ==(covariant ExifInfo other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.fileSize == fileSize && other.description == description && diff --git a/mobile/lib/domain/models/log.model.dart b/mobile/lib/domain/models/log.model.dart index 9902ca04ca..bed1729f9d 100644 --- a/mobile/lib/domain/models/log.model.dart +++ b/mobile/lib/domain/models/log.model.dart @@ -20,7 +20,9 @@ class LogMessage { @override bool operator ==(covariant LogMessage other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.message == message && other.level == level && diff --git a/mobile/lib/domain/models/map.model.dart b/mobile/lib/domain/models/map.model.dart index ce0834f0cb..b55f176bfd 100644 --- a/mobile/lib/domain/models/map.model.dart +++ b/mobile/lib/domain/models/map.model.dart @@ -8,7 +8,9 @@ class Marker { @override bool operator ==(covariant Marker other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.location == location && other.assetId == assetId; } diff --git a/mobile/lib/domain/models/memory.model.dart b/mobile/lib/domain/models/memory.model.dart index 40117c5ac6..e786ca18b1 100644 --- a/mobile/lib/domain/models/memory.model.dart +++ b/mobile/lib/domain/models/memory.model.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'package:collection/collection.dart'; - import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; enum MemoryTypeEnum { @@ -36,7 +35,9 @@ class MemoryData { @override bool operator ==(covariant MemoryData other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.year == year; } @@ -132,7 +133,9 @@ class DriftMemory { @override bool operator ==(covariant DriftMemory other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } final listEquals = const DeepCollectionEquality().equals; return other.id == id && diff --git a/mobile/lib/domain/models/metadata_key.dart b/mobile/lib/domain/models/metadata_key.dart index 667822663a..356882670a 100644 --- a/mobile/lib/domain/models/metadata_key.dart +++ b/mobile/lib/domain/models/metadata_key.dart @@ -115,12 +115,18 @@ final class _ListCodec extends _MetadataCodec> { List? decode(String raw) { try { final decoded = jsonDecode(raw); - if (decoded is! List) return null; + if (decoded is! List) { + return null; + } final result = []; for (final item in decoded) { - if (item is! String) return null; + if (item is! String) { + return null; + } final element = _elementCodec.decode(item); - if (element == null) return null; + if (element == null) { + return null; + } result.add(element); } return result; diff --git a/mobile/lib/domain/models/person.model.dart b/mobile/lib/domain/models/person.model.dart index 7559720c45..c7cdcff3af 100644 --- a/mobile/lib/domain/models/person.model.dart +++ b/mobile/lib/domain/models/person.model.dart @@ -69,7 +69,9 @@ class PersonDto { @override bool operator ==(covariant PersonDto other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && other.birthDate == birthDate && @@ -160,7 +162,9 @@ class DriftPerson { @override bool operator ==(covariant DriftPerson other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && other.createdAt == createdAt && diff --git a/mobile/lib/domain/models/search_result.model.dart b/mobile/lib/domain/models/search_result.model.dart index 21134b73d8..6a782e2f37 100644 --- a/mobile/lib/domain/models/search_result.model.dart +++ b/mobile/lib/domain/models/search_result.model.dart @@ -12,7 +12,9 @@ class SearchResult { @override bool operator ==(covariant SearchResult other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } final listEquals = const DeepCollectionEquality().equals; return listEquals(other.assets, assets) && other.nextPage == nextPage; diff --git a/mobile/lib/domain/models/stack.model.dart b/mobile/lib/domain/models/stack.model.dart index d5ccf5558d..f17f5788c9 100644 --- a/mobile/lib/domain/models/stack.model.dart +++ b/mobile/lib/domain/models/stack.model.dart @@ -37,7 +37,9 @@ class Stack { @override bool operator ==(covariant Stack other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && other.createdAt == createdAt && @@ -61,7 +63,9 @@ class StackResponse { @override bool operator ==(covariant StackResponse other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && other.primaryAssetId == primaryAssetId && other.assetIds == assetIds; } diff --git a/mobile/lib/domain/models/store.model.dart b/mobile/lib/domain/models/store.model.dart index 8a7cd3a71e..d0f2b52080 100644 --- a/mobile/lib/domain/models/store.model.dart +++ b/mobile/lib/domain/models/store.model.dart @@ -117,7 +117,9 @@ StoreDto: { @override bool operator ==(covariant StoreDto other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.key == key && other.value == value; } diff --git a/mobile/lib/domain/models/tag.model.dart b/mobile/lib/domain/models/tag.model.dart index 357367b13e..ba9aef02ee 100644 --- a/mobile/lib/domain/models/tag.model.dart +++ b/mobile/lib/domain/models/tag.model.dart @@ -13,7 +13,9 @@ class Tag { @override bool operator ==(covariant Tag other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && other.value == value; } diff --git a/mobile/lib/domain/models/user.model.dart b/mobile/lib/domain/models/user.model.dart index 380295b4b3..9ed70d61d6 100644 --- a/mobile/lib/domain/models/user.model.dart +++ b/mobile/lib/domain/models/user.model.dart @@ -125,7 +125,9 @@ profileChangedAt: $profileChangedAt @override bool operator ==(covariant UserDto other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && ((updatedAt == null && other.updatedAt == null) || @@ -219,7 +221,9 @@ class PartnerUserDto { @override bool operator ==(covariant PartnerUserDto other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && other.email == email && diff --git a/mobile/lib/domain/models/user_metadata.model.dart b/mobile/lib/domain/models/user_metadata.model.dart index af404051a7..3da1d94799 100644 --- a/mobile/lib/domain/models/user_metadata.model.dart +++ b/mobile/lib/domain/models/user_metadata.model.dart @@ -35,7 +35,9 @@ isOnboarded: $isOnboarded, @override bool operator ==(covariant Onboarding other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return isOnboarded == other.isOnboarded; } @@ -132,7 +134,9 @@ showSupportBadge: $showSupportBadge, @override bool operator ==(covariant Preferences other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.foldersEnabled == foldersEnabled && other.memoriesEnabled == memoriesEnabled && @@ -199,7 +203,9 @@ licenseKey: $licenseKey, @override bool operator ==(covariant License other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return activatedAt == other.activatedAt && activationKey == other.activationKey && licenseKey == other.licenseKey; } @@ -251,7 +257,9 @@ license: ${license ?? ""}, @override bool operator ==(covariant UserMetadata other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.userId == userId && other.key == key && diff --git a/mobile/lib/domain/services/remote_album.service.dart b/mobile/lib/domain/services/remote_album.service.dart index f060ba9290..d0af52dcfd 100644 --- a/mobile/lib/domain/services/remote_album.service.dart +++ b/mobile/lib/domain/services/remote_album.service.dart @@ -184,7 +184,9 @@ class RemoteAlbumService { List albums, { required AssetDateAggregation aggregation, }) async { - if (albums.isEmpty) return []; + if (albums.isEmpty) { + return []; + } final albumIds = albums.map((e) => e.id).toList(); final sortedIds = await _repository.getSortedAlbumIds(albumIds, aggregation: aggregation); diff --git a/mobile/lib/domain/services/store.service.dart b/mobile/lib/domain/services/store.service.dart index b325ffd631..16ed64e6d3 100644 --- a/mobile/lib/domain/services/store.service.dart +++ b/mobile/lib/domain/services/store.service.dart @@ -72,7 +72,9 @@ class StoreService { /// Stores the [value] for the [key]. Skips write if value hasn't changed. Future put, T>(U key, T value) async { - if (_cache[key.id] == value) return; + if (_cache[key.id] == value) { + return; + } await _storeRepository.upsert(key, value); _cache[key.id] = value; } diff --git a/mobile/lib/domain/services/sync_stream.service.dart b/mobile/lib/domain/services/sync_stream.service.dart index 906e352b49..c79799b333 100644 --- a/mobile/lib/domain/services/sync_stream.service.dart +++ b/mobile/lib/domain/services/sync_stream.service.dart @@ -318,7 +318,9 @@ class SyncStreamService { } Future handleWsAssetUploadReadyV1Batch(List batchData) async { - if (batchData.isEmpty) return; + if (batchData.isEmpty) { + return; + } _logger.info('Processing batch of ${batchData.length} AssetUploadReadyV1 events'); @@ -359,7 +361,9 @@ class SyncStreamService { } Future handleWsAssetUploadReadyV2Batch(List batchData) async { - if (batchData.isEmpty) return; + if (batchData.isEmpty) { + return; + } _logger.info('Processing batch of ${batchData.length} AssetUploadReadyV2 events'); diff --git a/mobile/lib/domain/services/user.service.dart b/mobile/lib/domain/services/user.service.dart index 1f9c015ad7..e7b4b0f4e6 100644 --- a/mobile/lib/domain/services/user.service.dart +++ b/mobile/lib/domain/services/user.service.dart @@ -30,7 +30,9 @@ class UserService { Future refreshMyUser() async { final user = await _userApiRepository.getMyUser(); - if (user == null) return null; + if (user == null) { + return null; + } await _storeService.put(StoreKey.currentUser, user); return user; } diff --git a/mobile/lib/extensions/scroll_extensions.dart b/mobile/lib/extensions/scroll_extensions.dart index 5b8f9e2a13..eb11734c67 100644 --- a/mobile/lib/extensions/scroll_extensions.dart +++ b/mobile/lib/extensions/scroll_extensions.dart @@ -94,8 +94,12 @@ class SnapScrollPhysics extends ScrollPhysics { bool get allowUserScrolling => false; static double target(ScrollMetrics position, double velocity, double snapOffset) { - if (velocity > _minFlingVelocity) return snapOffset; - if (velocity < -_minFlingVelocity) return position.pixels < snapOffset ? 0.0 : snapOffset; + if (velocity > _minFlingVelocity) { + return snapOffset; + } + if (velocity < -_minFlingVelocity) { + return position.pixels < snapOffset ? 0.0 : snapOffset; + } return position.pixels < minSnapDistance ? 0.0 : snapOffset; } } diff --git a/mobile/lib/infrastructure/loaders/image_request.dart b/mobile/lib/infrastructure/loaders/image_request.dart index 4df470277e..d0f3679084 100644 --- a/mobile/lib/infrastructure/loaders/image_request.dart +++ b/mobile/lib/infrastructure/loaders/image_request.dart @@ -2,15 +2,15 @@ import 'dart:async'; import 'dart:ffi'; import 'dart:ui' as ui; +import 'package:ffi/ffi.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:ffi/ffi.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/providers/infrastructure/platform.provider.dart'; part 'local_image_request.dart'; -part 'thumbhash_image_request.dart'; part 'remote_image_request.dart'; +part 'thumbhash_image_request.dart'; abstract class ImageRequest { static int _nextRequestId = 0; @@ -74,7 +74,9 @@ abstract class ImageRequest { Future _fromEncodedPlatformImage(int address, int length) async { final result = await _codecFromEncodedPlatformImage(address, length); - if (result == null) return null; + if (result == null) { + return null; + } final (codec, descriptor) = result; if (_isCancelled) { diff --git a/mobile/lib/infrastructure/loaders/local_image_request.dart b/mobile/lib/infrastructure/loaders/local_image_request.dart index a6c9fa2989..403e5d34cb 100644 --- a/mobile/lib/infrastructure/loaders/local_image_request.dart +++ b/mobile/lib/infrastructure/loaders/local_image_request.dart @@ -46,7 +46,9 @@ class LocalImageRequest extends ImageRequest { isVideo: assetType == AssetType.video, preferEncoded: true, ); - if (info == null) return null; + if (info == null) { + return null; + } final (codec, _) = await _codecFromEncodedPlatformImage(info['pointer']!, info['length']!) ?? (null, null); return codec; diff --git a/mobile/lib/infrastructure/loaders/remote_image_request.dart b/mobile/lib/infrastructure/loaders/remote_image_request.dart index bcfa9a93c7..da135f44d4 100644 --- a/mobile/lib/infrastructure/loaders/remote_image_request.dart +++ b/mobile/lib/infrastructure/loaders/remote_image_request.dart @@ -29,7 +29,9 @@ class RemoteImageRequest extends ImageRequest { } final info = await remoteImageApi.requestImage(uri, requestId: requestId, preferEncoded: true); - if (info == null) return null; + if (info == null) { + return null; + } final (codec, _) = await _codecFromEncodedPlatformImage(info['pointer']!, info['length']!) ?? (null, null); return codec; diff --git a/mobile/lib/infrastructure/repositories/api.repository.dart b/mobile/lib/infrastructure/repositories/api.repository.dart index 15696c65b7..9e11024539 100644 --- a/mobile/lib/infrastructure/repositories/api.repository.dart +++ b/mobile/lib/infrastructure/repositories/api.repository.dart @@ -5,7 +5,9 @@ class ApiRepository { Future checkNull(Future future) async { final response = await future; - if (response == null) throw const NoResponseDtoError(); + if (response == null) { + throw const NoResponseDtoError(); + } return response; } } diff --git a/mobile/lib/infrastructure/repositories/metadata.repository.dart b/mobile/lib/infrastructure/repositories/metadata.repository.dart index 6dafa5f02a..4b9ff04e79 100644 --- a/mobile/lib/infrastructure/repositories/metadata.repository.dart +++ b/mobile/lib/infrastructure/repositories/metadata.repository.dart @@ -48,7 +48,9 @@ class MetadataRepository extends DriftDatabaseRepository { T _read(MetadataKey key) => (_cache[key] as T?) ?? key.defaultValue; Future write(MetadataKey key, U value) async { - if (_read(key) == value) return; + if (_read(key) == value) { + return; + } await _db .into(_db.metadataEntity) @@ -79,13 +81,17 @@ class MetadataRepository extends DriftDatabaseRepository { final keyMap = MetadataKey.asKeyMap(); for (final row in rows) { final key = keyMap[row.key]; - if (key == null) continue; + if (key == null) { + continue; + } _updateCache(key, key.decode(row.value)); } } void _updateCache(MetadataKey key, T value) { - if (_cache[key] == value) return; + if (_cache[key] == value) { + return; + } _cache[key] = value; key.domain.rebuild(this); } diff --git a/mobile/lib/infrastructure/repositories/remote_album.repository.dart b/mobile/lib/infrastructure/repositories/remote_album.repository.dart index 19ebcaac45..c3b972d85f 100644 --- a/mobile/lib/infrastructure/repositories/remote_album.repository.dart +++ b/mobile/lib/infrastructure/repositories/remote_album.repository.dart @@ -360,7 +360,9 @@ class DriftRemoteAlbumRepository extends DriftDatabaseRepository { } Future> getSortedAlbumIds(List albumIds, {required AssetDateAggregation aggregation}) async { - if (albumIds.isEmpty) return []; + if (albumIds.isEmpty) { + return []; + } final jsonIds = jsonEncode(albumIds); final sqlAgg = aggregation == AssetDateAggregation.start ? 'MIN' : 'MAX'; diff --git a/mobile/lib/infrastructure/repositories/user.repository.dart b/mobile/lib/infrastructure/repositories/user.repository.dart index ce7cb124db..afcf2271dd 100644 --- a/mobile/lib/infrastructure/repositories/user.repository.dart +++ b/mobile/lib/infrastructure/repositories/user.repository.dart @@ -12,7 +12,9 @@ class DriftAuthUserRepository extends DriftDatabaseRepository { Future get(String id) async { final user = await _db.managers.authUserEntity.filter((user) => user.id.equals(id)).getSingleOrNull(); - if (user == null) return null; + if (user == null) { + return null; + } final query = _db.userMetadataEntity.select()..where((e) => e.userId.equals(id)); final metadata = await query.map((row) => row.toDto()).get(); diff --git a/mobile/lib/infrastructure/repositories/user_api.repository.dart b/mobile/lib/infrastructure/repositories/user_api.repository.dart index d21a1b71a6..aa645f2a4a 100644 --- a/mobile/lib/infrastructure/repositories/user_api.repository.dart +++ b/mobile/lib/infrastructure/repositories/user_api.repository.dart @@ -12,7 +12,9 @@ class UserApiRepository extends ApiRepository { Future getMyUser() async { final (adminDto, preferenceDto) = await (_api.getMyUser(), _api.getMyPreferences()).wait; - if (adminDto == null) return null; + if (adminDto == null) { + return null; + } return UserConverter.fromAdminDto(adminDto, preferenceDto); } diff --git a/mobile/lib/models/activities/activity.model.dart b/mobile/lib/models/activities/activity.model.dart index 38c2bef77a..d3f99aea64 100644 --- a/mobile/lib/models/activities/activity.model.dart +++ b/mobile/lib/models/activities/activity.model.dart @@ -44,7 +44,9 @@ class Activity { @override bool operator ==(covariant Activity other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.id == id && other.assetId == assetId && diff --git a/mobile/lib/models/auth/auth_state.model.dart b/mobile/lib/models/auth/auth_state.model.dart index 0d8357d66d..c8a8018929 100644 --- a/mobile/lib/models/auth/auth_state.model.dart +++ b/mobile/lib/models/auth/auth_state.model.dart @@ -44,7 +44,9 @@ class AuthState { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is AuthState && other.deviceId == deviceId && diff --git a/mobile/lib/models/auth/auxilary_endpoint.model.dart b/mobile/lib/models/auth/auxilary_endpoint.model.dart index c7f472e111..cd11918bed 100644 --- a/mobile/lib/models/auth/auxilary_endpoint.model.dart +++ b/mobile/lib/models/auth/auxilary_endpoint.model.dart @@ -16,7 +16,9 @@ class AuxilaryEndpoint { @override bool operator ==(covariant AuxilaryEndpoint other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.url == url && other.status == status; } @@ -53,7 +55,9 @@ class AuxCheckStatus { @override bool operator ==(covariant AuxCheckStatus other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.name == name; } diff --git a/mobile/lib/models/auth/biometric_status.model.dart b/mobile/lib/models/auth/biometric_status.model.dart index ad2b06be04..c5c417d06d 100644 --- a/mobile/lib/models/auth/biometric_status.model.dart +++ b/mobile/lib/models/auth/biometric_status.model.dart @@ -19,7 +19,9 @@ class BiometricStatus { @override bool operator ==(covariant BiometricStatus other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } final listEquals = const DeepCollectionEquality().equals; return listEquals(other.availableBiometrics, availableBiometrics) && other.canAuthenticate == canAuthenticate; diff --git a/mobile/lib/models/cast/cast_manager_state.dart b/mobile/lib/models/cast/cast_manager_state.dart index c948921792..9727bc7ed8 100644 --- a/mobile/lib/models/cast/cast_manager_state.dart +++ b/mobile/lib/models/cast/cast_manager_state.dart @@ -67,7 +67,9 @@ class CastManagerState { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is CastManagerState && other.isCasting == isCasting && diff --git a/mobile/lib/models/download/download_state.model.dart b/mobile/lib/models/download/download_state.model.dart index 82d4e31253..bed92d98b6 100644 --- a/mobile/lib/models/download/download_state.model.dart +++ b/mobile/lib/models/download/download_state.model.dart @@ -41,7 +41,9 @@ class DownloadInfo { @override bool operator ==(covariant DownloadInfo other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.fileName == fileName && other.progress == progress && other.status == status; } @@ -71,7 +73,9 @@ class DownloadState { @override bool operator ==(covariant DownloadState other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } final mapEquals = const DeepCollectionEquality().equals; return other.downloadStatus == downloadStatus && diff --git a/mobile/lib/models/download/livephotos_medatada.model.dart b/mobile/lib/models/download/livephotos_medatada.model.dart index f77a1514ac..228ad707da 100644 --- a/mobile/lib/models/download/livephotos_medatada.model.dart +++ b/mobile/lib/models/download/livephotos_medatada.model.dart @@ -32,7 +32,9 @@ class LivePhotosMetadata { @override bool operator ==(covariant LivePhotosMetadata other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.part == part && other.id == id; } diff --git a/mobile/lib/models/map/map_marker.model.dart b/mobile/lib/models/map/map_marker.model.dart index 0f425306ff..d730f9bd6d 100644 --- a/mobile/lib/models/map/map_marker.model.dart +++ b/mobile/lib/models/map/map_marker.model.dart @@ -17,7 +17,9 @@ class MapMarker { @override bool operator ==(covariant MapMarker other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.latLng == latLng && other.assetRemoteId == assetRemoteId; } diff --git a/mobile/lib/models/map/map_state.model.dart b/mobile/lib/models/map/map_state.model.dart index 78747e770d..a4863aa465 100644 --- a/mobile/lib/models/map/map_state.model.dart +++ b/mobile/lib/models/map/map_state.model.dart @@ -51,7 +51,9 @@ class MapState { @override bool operator ==(covariant MapState other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.themeMode == themeMode && other.showFavoriteOnly == showFavoriteOnly && diff --git a/mobile/lib/models/search/search_curated_content.model.dart b/mobile/lib/models/search/search_curated_content.model.dart index 6e4a083876..58c4c73264 100644 --- a/mobile/lib/models/search/search_curated_content.model.dart +++ b/mobile/lib/models/search/search_curated_content.model.dart @@ -42,7 +42,9 @@ class SearchCuratedContent { @override bool operator ==(covariant SearchCuratedContent other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.label == label && other.subtitle == subtitle && other.id == id; } diff --git a/mobile/lib/models/search/search_filter.model.dart b/mobile/lib/models/search/search_filter.model.dart index 16f3be4655..cf1a1dcdaf 100644 --- a/mobile/lib/models/search/search_filter.model.dart +++ b/mobile/lib/models/search/search_filter.model.dart @@ -36,7 +36,9 @@ class SearchLocationFilter { @override bool operator ==(covariant SearchLocationFilter other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.country == country && other.state == state && other.city == city; } @@ -75,7 +77,9 @@ class SearchCameraFilter { @override bool operator ==(covariant SearchCameraFilter other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.make == make && other.model == model; } @@ -117,7 +121,9 @@ class SearchDateFilter { @override bool operator ==(covariant SearchDateFilter other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.takenBefore == takenBefore && other.takenAfter == takenAfter; } @@ -152,7 +158,9 @@ class SearchRatingFilter { @override bool operator ==(covariant SearchRatingFilter other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.rating == rating; } @@ -198,7 +206,9 @@ class SearchDisplayFilters { @override bool operator ==(covariant SearchDisplayFilters other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.isNotInAlbum == isNotInAlbum && other.isArchive == isArchive && other.isFavorite == isFavorite; } @@ -305,7 +315,9 @@ class SearchFilter { @override bool operator ==(covariant SearchFilter other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.context == context && other.filename == filename && diff --git a/mobile/lib/models/server_info/server_config.model.dart b/mobile/lib/models/server_info/server_config.model.dart index 37b98afadb..15bbe41485 100644 --- a/mobile/lib/models/server_info/server_config.model.dart +++ b/mobile/lib/models/server_info/server_config.model.dart @@ -38,7 +38,9 @@ class ServerConfig { @override bool operator ==(covariant ServerConfig other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.trashDays == trashDays && other.oauthButtonText == oauthButtonText && diff --git a/mobile/lib/models/server_info/server_disk_info.model.dart b/mobile/lib/models/server_info/server_disk_info.model.dart index 01042b9f6d..16e58b331d 100644 --- a/mobile/lib/models/server_info/server_disk_info.model.dart +++ b/mobile/lib/models/server_info/server_disk_info.model.dart @@ -35,7 +35,9 @@ class ServerDiskInfo { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is ServerDiskInfo && other.diskAvailable == diskAvailable && diff --git a/mobile/lib/models/server_info/server_features.model.dart b/mobile/lib/models/server_info/server_features.model.dart index 78a80c9013..c288c1bfbf 100644 --- a/mobile/lib/models/server_info/server_features.model.dart +++ b/mobile/lib/models/server_info/server_features.model.dart @@ -50,7 +50,9 @@ class ServerFeatures { @override bool operator ==(covariant ServerFeatures other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.trash == trash && other.map == map && diff --git a/mobile/lib/models/server_info/server_info.model.dart b/mobile/lib/models/server_info/server_info.model.dart index a039bb70eb..33d6393e15 100644 --- a/mobile/lib/models/server_info/server_info.model.dart +++ b/mobile/lib/models/server_info/server_info.model.dart @@ -60,7 +60,9 @@ class ServerInfo { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is ServerInfo && other.serverVersion == serverVersion && diff --git a/mobile/lib/models/upload/share_intent_attachment.model.dart b/mobile/lib/models/upload/share_intent_attachment.model.dart index e5388fce2c..0f9c3e4c29 100644 --- a/mobile/lib/models/upload/share_intent_attachment.model.dart +++ b/mobile/lib/models/upload/share_intent_attachment.model.dart @@ -88,7 +88,9 @@ class ShareIntentAttachment { @override bool operator ==(covariant ShareIntentAttachment other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.path == path && other.type == type; } diff --git a/mobile/lib/pages/backup/drift_backup.page.dart b/mobile/lib/pages/backup/drift_backup.page.dart index 6bdb8dd552..2e18c3edc6 100644 --- a/mobile/lib/pages/backup/drift_backup.page.dart +++ b/mobile/lib/pages/backup/drift_backup.page.dart @@ -418,7 +418,9 @@ class _PreparingStatusState extends ConsumerState { } void _startPollingIfNeeded() { - if (_pollingTimer != null) return; + if (_pollingTimer != null) { + return; + } _pollingTimer = Timer.periodic(const Duration(seconds: 3), (timer) async { final currentUser = ref.read(currentUserProvider); diff --git a/mobile/lib/pages/backup/drift_backup_album_selection.page.dart b/mobile/lib/pages/backup/drift_backup_album_selection.page.dart index 1732385675..93a1d629b8 100644 --- a/mobile/lib/pages/backup/drift_backup_album_selection.page.dart +++ b/mobile/lib/pages/backup/drift_backup_album_selection.page.dart @@ -83,7 +83,9 @@ class _DriftBackupAlbumSelectionPageState extends ConsumerState { } for (final item in uploadingItems) { - if (_taskSlotAssignments.containsKey(item.taskId)) continue; + if (_taskSlotAssignments.containsKey(item.taskId)) { + continue; + } for (int i = 0; i < _maxSlots; i++) { if (slots[i] == null) { diff --git a/mobile/lib/pages/common/headers_settings.page.dart b/mobile/lib/pages/common/headers_settings.page.dart index 6eba49442f..1fa183456c 100644 --- a/mobile/lib/pages/common/headers_settings.page.dart +++ b/mobile/lib/pages/common/headers_settings.page.dart @@ -93,7 +93,9 @@ class HeaderSettingsPage extends HookConsumerWidget { final key = header.key.trim(); final value = header.value.trim(); - if (key.isEmpty || value.isEmpty) continue; + if (key.isEmpty || value.isEmpty) { + continue; + } headersMap[key] = value; } diff --git a/mobile/lib/pages/library/folder/folder.page.dart b/mobile/lib/pages/library/folder/folder.page.dart index 9de230d550..e2766df547 100644 --- a/mobile/lib/pages/library/folder/folder.page.dart +++ b/mobile/lib/pages/library/folder/folder.page.dart @@ -31,7 +31,9 @@ RecursiveFolder? _findFolderInStructure(RootFolder rootFolder, RecursiveFolder t if (folder.subfolders.isNotEmpty) { final found = _findFolderInStructure(folder, targetFolder); - if (found != null) return found; + if (found != null) { + return found; + } } } return null; @@ -113,7 +115,9 @@ class FolderContent extends HookConsumerWidget { // Initial asset fetch useEffect(() { - if (folder == null) return; + if (folder == null) { + return; + } ref.read(folderRenderListProvider(folder!).notifier).fetchAssets(sortOrder); return null; }, [folder]); diff --git a/mobile/lib/pages/library/shared_link/shared_link.page.dart b/mobile/lib/pages/library/shared_link/shared_link.page.dart index 66a77fb761..261c6975ef 100644 --- a/mobile/lib/pages/library/shared_link/shared_link.page.dart +++ b/mobile/lib/pages/library/shared_link/shared_link.page.dart @@ -20,7 +20,9 @@ class SharedLinkPage extends HookConsumerWidget { useEffect(() { ref.read(sharedLinksStateProvider.notifier).fetchLinks(); return () { - if (!context.mounted) return; + if (!context.mounted) { + return; + } ref.invalidate(sharedLinksStateProvider); }; }, []); diff --git a/mobile/lib/presentation/pages/drift_asset_troubleshoot.page.dart b/mobile/lib/presentation/pages/drift_asset_troubleshoot.page.dart index f5ceba6d0e..20021bada1 100644 --- a/mobile/lib/presentation/pages/drift_asset_troubleshoot.page.dart +++ b/mobile/lib/presentation/pages/drift_asset_troubleshoot.page.dart @@ -191,8 +191,12 @@ class _AssetPropertiesSectionState extends ConsumerState<_AssetPropertiesSection } String _getAssetTypeTitle(BaseAsset asset) { - if (asset is LocalAsset) return 'Local Asset'; - if (asset is RemoteAsset) return 'Remote Asset'; + if (asset is LocalAsset) { + return 'Local Asset'; + } + if (asset is RemoteAsset) { + return 'Remote Asset'; + } return 'Base Asset'; } } diff --git a/mobile/lib/presentation/pages/drift_remote_album.page.dart b/mobile/lib/presentation/pages/drift_remote_album.page.dart index ba9ccf2ffd..09c7912bc6 100644 --- a/mobile/lib/presentation/pages/drift_remote_album.page.dart +++ b/mobile/lib/presentation/pages/drift_remote_album.page.dart @@ -245,7 +245,9 @@ class _EditAlbumDialogState extends ConsumerState<_EditAlbumDialog> { } Future _handleSave() async { - if (formKey.currentState?.validate() != true) return; + if (formKey.currentState?.validate() != true) { + return; + } try { final newTitle = titleController.text.trim(); diff --git a/mobile/lib/presentation/pages/edit/drift_edit.page.dart b/mobile/lib/presentation/pages/edit/drift_edit.page.dart index 8f7d874983..dcb340cc0e 100644 --- a/mobile/lib/presentation/pages/edit/drift_edit.page.dart +++ b/mobile/lib/presentation/pages/edit/drift_edit.page.dart @@ -95,7 +95,9 @@ class _DriftEditImagePageState extends ConsumerState with Ti return PopScope( canPop: !hasUnsavedEdits, onPopInvokedWithResult: (didPop, result) async { - if (didPop) return; + if (didPop) { + return; + } final shouldDiscard = await _showDiscardChangesDialog() ?? false; if (shouldDiscard && mounted) { Navigator.of(context).pop(); diff --git a/mobile/lib/presentation/pages/edit/editor.provider.dart b/mobile/lib/presentation/pages/edit/editor.provider.dart index 21b5268912..fcfb8be68e 100644 --- a/mobile/lib/presentation/pages/edit/editor.provider.dart +++ b/mobile/lib/presentation/pages/edit/editor.provider.dart @@ -179,7 +179,9 @@ class EditorState { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is EditorState && other.isApplyingEdits == isApplyingEdits && diff --git a/mobile/lib/presentation/pages/profile/profile_picture_crop.page.dart b/mobile/lib/presentation/pages/profile/profile_picture_crop.page.dart index f460633cbb..3fb32b7d93 100644 --- a/mobile/lib/presentation/pages/profile/profile_picture_crop.page.dart +++ b/mobile/lib/presentation/pages/profile/profile_picture_crop.page.dart @@ -58,7 +58,9 @@ class _ProfilePictureCropPageState extends ConsumerState } Future _handleDone() async { - if (_isLoading) return; + if (_isLoading) { + return; + } setState(() { _isLoading = true; @@ -72,7 +74,9 @@ class _ProfilePictureCropPageState extends ConsumerState .read(uploadProfileImageProvider.notifier) .upload(xFile, fileName: 'profile-picture.png'); - if (!context.mounted) return; + if (!context.mounted) { + return; + } if (success) { final profileImagePath = ref.read(uploadProfileImageProvider).profileImagePath; @@ -102,7 +106,9 @@ class _ProfilePictureCropPageState extends ConsumerState ); } } catch (e) { - if (!context.mounted) return; + if (!context.mounted) { + return; + } ImmichToast.show( context: context, diff --git a/mobile/lib/presentation/pages/search/drift_search.page.dart b/mobile/lib/presentation/pages/search/drift_search.page.dart index c5d7d0f36d..83d20a4989 100644 --- a/mobile/lib/presentation/pages/search/drift_search.page.dart +++ b/mobile/lib/presentation/pages/search/drift_search.page.dart @@ -708,7 +708,9 @@ class _SearchResultGrid extends ConsumerWidget { bool _onScrollUpdateNotification(ScrollNotification notification) { final metrics = notification.metrics; - if (metrics.axis != Axis.vertical) return false; + if (metrics.axis != Axis.vertical) { + return false; + } final isBottomSheet = notification.context?.findAncestorWidgetOfExactType() != null; final remaining = metrics.maxScrollExtent - metrics.pixels; @@ -735,7 +737,9 @@ class _SearchResultGrid extends ConsumerWidget { final hasMore = ref.watch(paginatedSearchProvider.select((s) => s.nextPage != null)); - if (hasMore) return null; + if (hasMore) { + return null; + } return SliverToBoxAdapter( child: Padding( diff --git a/mobile/lib/presentation/pages/search/paginated_search.provider.dart b/mobile/lib/presentation/pages/search/paginated_search.provider.dart index f65ca6b909..fa2d5a06cf 100644 --- a/mobile/lib/presentation/pages/search/paginated_search.provider.dart +++ b/mobile/lib/presentation/pages/search/paginated_search.provider.dart @@ -44,7 +44,9 @@ class PaginatedSearchNotifier extends StateNotifier { Stream get assetCount => _assetCountController.stream; Future search(SearchFilter filter) async { - if (state.nextPage == null || state.isLoading) return; + if (state.nextPage == null || state.isLoading) { + return; + } state = SearchState(assets: state.assets, nextPage: state.nextPage, isLoading: true); diff --git a/mobile/lib/presentation/widgets/action_buttons/add_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/add_action_button.widget.dart index 39bdef8b9a..ecfe4a60fe 100644 --- a/mobile/lib/presentation/widgets/action_buttons/add_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/add_action_button.widget.dart @@ -50,7 +50,9 @@ class _AddActionButtonState extends ConsumerState { List _buildMenuChildren() { final asset = ref.read(assetViewerProvider).currentAsset; - if (asset == null) return []; + if (asset == null) { + return []; + } final user = ref.read(currentUserProvider); final isOwner = asset is RemoteAsset && asset.ownerId == user?.id; diff --git a/mobile/lib/presentation/widgets/action_buttons/archive_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/archive_action_button.widget.dart index a673dff1d7..bb2cae21ad 100644 --- a/mobile/lib/presentation/widgets/action_buttons/archive_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/archive_action_button.widget.dart @@ -12,7 +12,9 @@ import 'package:immich_mobile/widgets/common/immich_toast.dart'; // used to allow performing archive action from different sources (without duplicating code) Future performArchiveAction(BuildContext context, WidgetRef ref, {required ActionSource source}) async { - if (!context.mounted) return; + if (!context.mounted) { + return; + } if (source == ActionSource.viewer) { EventStream.shared.emit(const ViewerReloadAssetEvent()); diff --git a/mobile/lib/presentation/widgets/action_buttons/delete_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/delete_action_button.widget.dart index 2121ef3159..92747c6d44 100644 --- a/mobile/lib/presentation/widgets/action_buttons/delete_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/delete_action_button.widget.dart @@ -54,7 +54,9 @@ class DeleteActionButton extends ConsumerWidget { ], ), ); - if (confirm != true) return; + if (confirm != true) { + return; + } } if (source == ActionSource.viewer) { diff --git a/mobile/lib/presentation/widgets/action_buttons/delete_permanent_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/delete_permanent_action_button.widget.dart index 27a1a4d8af..d2df013369 100644 --- a/mobile/lib/presentation/widgets/action_buttons/delete_permanent_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/delete_permanent_action_button.widget.dart @@ -33,7 +33,9 @@ class DeletePermanentActionButton extends ConsumerWidget { builder: (context) => PermanentDeleteDialog(count: count), ) ?? false; - if (!confirm) return; + if (!confirm) { + return; + } if (source == ActionSource.viewer) { EventStream.shared.emit(const ViewerReloadAssetEvent()); diff --git a/mobile/lib/presentation/widgets/action_buttons/move_to_lock_folder_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/move_to_lock_folder_action_button.widget.dart index 2f7c3899eb..56191e9055 100644 --- a/mobile/lib/presentation/widgets/action_buttons/move_to_lock_folder_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/move_to_lock_folder_action_button.widget.dart @@ -12,7 +12,9 @@ import 'package:immich_mobile/widgets/common/immich_toast.dart'; // Reusable helper: move to locked folder from any source (e.g called from menu) Future performMoveToLockFolderAction(BuildContext context, WidgetRef ref, {required ActionSource source}) async { - if (!context.mounted) return; + if (!context.mounted) { + return; + } if (source == ActionSource.viewer) { EventStream.shared.emit(const ViewerReloadAssetEvent()); diff --git a/mobile/lib/presentation/widgets/action_buttons/unarchive_action_button.widget.dart b/mobile/lib/presentation/widgets/action_buttons/unarchive_action_button.widget.dart index 98e868d953..57221303a8 100644 --- a/mobile/lib/presentation/widgets/action_buttons/unarchive_action_button.widget.dart +++ b/mobile/lib/presentation/widgets/action_buttons/unarchive_action_button.widget.dart @@ -14,7 +14,9 @@ import 'package:immich_mobile/domain/utils/event_stream.dart'; // used to allow performing unarchive action from different sources (without duplicating code) Future performUnArchiveAction(BuildContext context, WidgetRef ref, {required ActionSource source}) async { - if (!context.mounted) return; + if (!context.mounted) { + return; + } if (source == ActionSource.viewer) { EventStream.shared.emit(const ViewerReloadAssetEvent()); diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_details/appears_in_details.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_details/appears_in_details.widget.dart index fc15503a3f..6a565fa2cd 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_details/appears_in_details.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_details/appears_in_details.widget.dart @@ -21,21 +21,27 @@ class AppearsInDetails extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - if (!asset.hasRemote) return const SizedBox.shrink(); + if (!asset.hasRemote) { + return const SizedBox.shrink(); + } final remoteAssetId = switch (asset) { RemoteAsset(:final id) => id, LocalAsset(:final remoteAssetId) => remoteAssetId, }; - if (remoteAssetId == null) return const SizedBox.shrink(); + if (remoteAssetId == null) { + return const SizedBox.shrink(); + } final userId = ref.watch(currentUserProvider)?.id; final assetAlbums = ref.watch(albumsContainingAssetProvider(remoteAssetId)); return assetAlbums.when( data: (albums) { - if (albums.isEmpty) return const SizedBox.shrink(); + if (albums.isEmpty) { + return const SizedBox.shrink(); + } albums.sortBy((a) => a.name); diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_details/rating_details.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_details/rating_details.widget.dart index fb3a9dd8a8..1056626119 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_details/rating_details.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_details/rating_details.widget.dart @@ -20,7 +20,9 @@ class RatingDetails extends ConsumerWidget { .watch(userMetadataPreferencesProvider) .maybeWhen(data: (prefs) => prefs?.ratingsEnabled ?? false, orElse: () => false); - if (!isRatingEnabled) return const SizedBox.shrink(); + if (!isRatingEnabled) { + return const SizedBox.shrink(); + } return Padding( padding: const EdgeInsets.only(left: 16.0, top: 16.0), diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_details/technical_details.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_details/technical_details.widget.dart index 73b23b6414..33e0fa38f5 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_details/technical_details.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_details/technical_details.widget.dart @@ -111,7 +111,9 @@ class TechnicalDetails extends ConsumerWidget { } static String? _getCameraInfoTitle(ExifInfo? exifInfo) { - if (exifInfo == null) return null; + if (exifInfo == null) { + return null; + } return switch ((exifInfo.make, exifInfo.model)) { (null, null) => null, (String make, null) => make, @@ -121,17 +123,23 @@ class TechnicalDetails extends ConsumerWidget { } static String? _getCameraInfoSubtitle(ExifInfo? exifInfo) { - if (exifInfo == null) return null; + if (exifInfo == null) { + return null; + } final exposureTime = exifInfo.exposureTime.isNotEmpty ? exifInfo.exposureTime : null; final iso = exifInfo.iso != null ? 'ISO ${exifInfo.iso}' : null; return [exposureTime, iso].where((spec) => spec != null && spec.isNotEmpty).join(_kSeparator); } static String? _getLensInfoSubtitle(ExifInfo? exifInfo) { - if (exifInfo == null) return null; + if (exifInfo == null) { + return null; + } final fNumber = exifInfo.fNumber.isNotEmpty ? 'ƒ/${exifInfo.fNumber}' : null; final focalLength = exifInfo.focalLength.isNotEmpty ? '${exifInfo.focalLength} mm' : null; - if (fNumber == null && focalLength == null) return null; + if (fNumber == null && focalLength == null) { + return null; + } return [fNumber, focalLength].where((spec) => spec != null && spec.isNotEmpty).join(_kSeparator); } } diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart index bfd9738dc7..a531917e5b 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart @@ -14,14 +14,14 @@ import 'package:immich_mobile/extensions/scroll_extensions.dart'; import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_details.widget.dart'; import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_stack.provider.dart'; import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_stack.widget.dart'; -import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/presentation/widgets/asset_viewer/video_viewer.widget.dart'; import 'package:immich_mobile/presentation/widgets/images/image_provider.dart'; import 'package:immich_mobile/presentation/widgets/images/thumbnail.widget.dart'; import 'package:immich_mobile/providers/app_settings.provider.dart'; +import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/providers/asset_viewer/is_motion_video_playing.provider.dart'; -import 'package:immich_mobile/services/app_settings.service.dart'; import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart'; +import 'package:immich_mobile/services/app_settings.service.dart'; import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart'; import 'package:immich_mobile/widgets/photo_view/photo_view.dart'; @@ -62,7 +62,9 @@ class _AssetPageState extends ConsumerState { super.initState(); _eventSubscription = EventStream.shared.listen(_onEvent); WidgetsBinding.instance.addPostFrameCallback((_) { - if (!mounted || !_scrollController.hasClients) return; + if (!mounted || !_scrollController.hasClients) { + return; + } _scrollController.snapPosition.snapOffset = _snapOffset; if (_showingDetails && _snapOffset > 0) { _scrollController.jumpTo(_snapOffset); @@ -87,7 +89,9 @@ class _AssetPageState extends ConsumerState { } void _showDetails() { - if (!_scrollController.hasClients || _snapOffset <= 0) return; + if (!_scrollController.hasClients || _snapOffset <= 0) { + return; + } _viewer.setShowingDetails(true); _scrollController.animateTo(_snapOffset, duration: Durations.medium2, curve: Curves.easeOutCubic); } @@ -128,7 +132,9 @@ class _AssetPageState extends ConsumerState { } void _updateDrag(DragUpdateDetails details) { - if (_dragStart == null) return; + if (_dragStart == null) { + return; + } if (_dragIntent == _DragIntent.none) { _dragIntent = switch ((details.globalPosition - _dragStart!.globalPosition).dy) { @@ -141,7 +147,9 @@ class _AssetPageState extends ConsumerState { switch (_dragIntent) { case _DragIntent.none: case _DragIntent.scroll: - if (_drag == null) _startProxyDrag(); + if (_drag == null) { + _startProxyDrag(); + } _drag?.update(details); _syncShowingDetails(); @@ -151,7 +159,9 @@ class _AssetPageState extends ConsumerState { } void _endDrag(DragEndDetails details) { - if (_dragStart == null) return; + if (_dragStart == null) { + return; + } final start = _dragStart; _dragStart = null; @@ -188,7 +198,9 @@ class _AssetPageState extends ConsumerState { PhotoViewControllerBase controller, PhotoViewScaleStateController scaleStateController, ) { - if (!_showingDetails && _isZoomed) return; + if (!_showingDetails && _isZoomed) { + return; + } _beginDrag(details); } @@ -215,7 +227,9 @@ class _AssetPageState extends ConsumerState { } void _onTapUp(BuildContext context, TapUpDetails details, PhotoViewControllerValue controllerValue) { - if (_showingDetails || _dragStart != null) return; + if (_showingDetails || _dragStart != null) { + return; + } final tapToNavigate = ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.tapToNavigate); if (!tapToNavigate) { @@ -247,31 +261,43 @@ class _AssetPageState extends ConsumerState { _viewer.setZoomed(_isZoomed); if (scaleState != PhotoViewScaleState.initial) { - if (_dragStart == null) _viewer.setControls(false); + if (_dragStart == null) { + _viewer.setControls(false); + } return; } - if (!_showingDetails) _viewer.setControls(true); + if (!_showingDetails) { + _viewer.setControls(true); + } } void _listenForScaleBoundaries(PhotoViewControllerBase? controller) { _scaleBoundarySub?.cancel(); _scaleBoundarySub = null; - if (controller == null || controller.scaleBoundaries != null) return; + if (controller == null || controller.scaleBoundaries != null) { + return; + } _scaleBoundarySub = controller.outputStateStream.listen((_) { if (controller.scaleBoundaries != null) { _scaleBoundarySub?.cancel(); _scaleBoundarySub = null; - if (mounted) setState(() {}); + if (mounted) { + setState(() {}); + } } }); } double _getImageHeight(double maxWidth, double maxHeight, BaseAsset? asset) { final sb = _viewController?.scaleBoundaries; - if (sb != null) return sb.childSize.height * sb.initialScale; + if (sb != null) { + return sb.childSize.height * sb.initialScale; + } - if (asset == null || asset.width == null || asset.height == null) return maxHeight; + if (asset == null || asset.width == null || asset.height == null) { + return maxHeight; + } final r = asset.width! / asset.height!; return math.min(maxWidth / r, maxHeight); diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_preloader.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_preloader.dart index ca7498a37f..4d1856b90d 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_preloader.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_preloader.dart @@ -21,12 +21,16 @@ class AssetPreloader { unawaited(timelineService.preloadAssets(index)); _timer?.cancel(); _timer = Timer(Durations.medium4, () async { - if (!mounted()) return; + if (!mounted()) { + return; + } final (prev, next) = await ( timelineService.getAssetAsync(index - 1), timelineService.getAssetAsync(index + 1), ).wait; - if (!mounted()) return; + if (!mounted()) { + return; + } _prevStream?.removeListener(_dummyListener); _nextStream?.removeListener(_dummyListener); _prevStream = prev != null ? _resolveImage(prev, size) : null; diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart index 3308ae8295..c8d8f63fa9 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_viewer.page.dart @@ -17,9 +17,9 @@ import 'package:immich_mobile/presentation/widgets/action_buttons/download_statu import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_page.widget.dart'; import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_preloader.dart'; import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_stack.provider.dart'; -import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; -import 'package:immich_mobile/presentation/widgets/asset_viewer/viewer_top_app_bar.widget.dart'; import 'package:immich_mobile/presentation/widgets/asset_viewer/viewer_bottom_app_bar.widget.dart'; +import 'package:immich_mobile/presentation/widgets/asset_viewer/viewer_top_app_bar.widget.dart'; +import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/providers/cast.provider.dart'; import 'package:immich_mobile/providers/infrastructure/current_album.provider.dart'; import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart'; @@ -67,7 +67,9 @@ class AssetViewer extends ConsumerStatefulWidget { ref.read(assetViewerProvider.notifier).reset(); // Hide controls by default for videos - if (asset.isVideo) ref.read(assetViewerProvider.notifier).setControls(false); + if (asset.isVideo) { + ref.read(assetViewerProvider.notifier).setControls(false); + } _setAsset(ref, asset); } @@ -90,7 +92,9 @@ class _AssetViewerState extends ConsumerState { void _onTapNavigate(int direction) { final page = _pageController.page?.toInt(); - if (page == null) return; + if (page == null) { + return; + } final target = page + direction; final maxPage = _totalAssets - 1; if (target >= 0 && target <= maxPage) { @@ -105,7 +109,9 @@ class _AssetViewerState extends ConsumerState { final asset = ref.read(assetViewerProvider).currentAsset; assert(asset != null, "Current asset should not be null when opening the AssetViewer"); - if (asset != null) _stackChildrenKeepAlive = ref.read(stackChildrenNotifier(asset).notifier).ref.keepAlive(); + if (asset != null) { + _stackChildrenKeepAlive = ref.read(stackChildrenNotifier(asset).notifier).ref.keepAlive(); + } _reloadSubscription = EventStream.shared.listen(_onEvent); @@ -137,7 +143,9 @@ class _AssetViewerState extends ConsumerState { // playing, and preventing the video on the next page from becoming ready // unnecessarily. bool _onScrollEnd(ScrollEndNotification notification) { - if (notification.depth != 0) return false; + if (notification.depth != 0) { + return false; + } final page = _pageController.page?.round(); if (page != null && page != _currentPage) { @@ -155,7 +163,9 @@ class _AssetViewerState extends ConsumerState { _currentPage = index; final asset = await ref.read(timelineServiceProvider).getAssetAsync(index); - if (asset == null) return; + if (asset == null) { + return; + } AssetViewer._setAsset(ref, asset); _preloader.preload(index, context.sizeData); @@ -165,9 +175,13 @@ class _AssetViewerState extends ConsumerState { } void _handleCasting() { - if (!ref.read(castProvider).isCasting) return; + if (!ref.read(castProvider).isCasting) { + return; + } final asset = ref.read(assetViewerProvider).currentAsset; - if (asset == null) return; + if (asset == null) { + return; + } if (asset is RemoteAsset) { context.scaffoldMessenger.hideCurrentSnackBar(); @@ -199,7 +213,9 @@ class _AssetViewerState extends ConsumerState { } void _onViewerReloadEvent() { - if (_totalAssets <= 1) return; + if (_totalAssets <= 1) { + return; + } final index = _pageController.page?.round() ?? 0; final target = index >= _totalAssets - 1 ? index - 1 : index + 1; @@ -252,7 +268,9 @@ class _AssetViewerState extends ConsumerState { // Listen for casting changes and send initial asset to the cast provider ref.listen(castProvider.select((value) => value.isCasting), (_, isCasting) { - if (!isCasting) return; + if (!isCasting) { + return; + } WidgetsBinding.instance.addPostFrameCallback((_) { _handleCasting(); }); diff --git a/mobile/lib/presentation/widgets/asset_viewer/rating_bar.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/rating_bar.widget.dart index 62a439fe39..bd4935e41f 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/rating_bar.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/rating_bar.widget.dart @@ -53,7 +53,9 @@ class _RatingBarState extends State { final totalWidth = widget.itemCount * widget.itemSize + (widget.itemCount - 1) * widget.starPadding; double dx = localPosition.dx; - if (isRTL) dx = totalWidth - dx; + if (isRTL) { + dx = totalWidth - dx; + } double newRating; diff --git a/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart index fb5c02599d..bf2ab17425 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart @@ -9,8 +9,8 @@ import 'package:immich_mobile/domain/services/setting.service.dart'; import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/extensions/platform_extensions.dart'; import 'package:immich_mobile/infrastructure/repositories/storage.repository.dart'; -import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/providers/app_settings.provider.dart'; +import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/providers/asset_viewer/is_motion_video_playing.provider.dart'; import 'package:immich_mobile/providers/asset_viewer/video_player_provider.dart'; import 'package:immich_mobile/providers/cast.provider.dart'; @@ -61,7 +61,9 @@ class _NativeVideoViewerState extends ConsumerState with Widg void didUpdateWidget(NativeVideoViewer oldWidget) { super.didUpdateWidget(oldWidget); - if (widget.isCurrent == oldWidget.isCurrent || _controller == null) return; + if (widget.isCurrent == oldWidget.isCurrent || _controller == null) { + return; + } if (!widget.isCurrent) { _loadTimer?.cancel(); @@ -85,25 +87,35 @@ class _NativeVideoViewerState extends ConsumerState with Widg void didChangeAppLifecycleState(AppLifecycleState state) async { switch (state) { case AppLifecycleState.resumed: - if (_shouldPlayOnForeground) await _notifier.play(); + if (_shouldPlayOnForeground) { + await _notifier.play(); + } case AppLifecycleState.paused: _shouldPlayOnForeground = await _controller?.isPlaying() ?? true; - if (_shouldPlayOnForeground) await _notifier.pause(); + if (_shouldPlayOnForeground) { + await _notifier.pause(); + } default: } } Future _createSource() async { - if (!mounted) return null; + if (!mounted) { + return null; + } final videoAsset = await ref.read(assetServiceProvider).getAsset(widget.asset) ?? widget.asset; - if (!mounted) return null; + if (!mounted) { + return null; + } try { if (videoAsset.hasLocal && videoAsset.livePhotoVideoId == null) { final id = videoAsset is LocalAsset ? videoAsset.id : (videoAsset as RemoteAsset).localId!; final file = await StorageRepository().getFileForAsset(id); - if (!mounted) return null; + if (!mounted) { + return null; + } if (file == null) { throw Exception('No file found for the video'); @@ -134,25 +146,35 @@ class _NativeVideoViewerState extends ConsumerState with Widg } void _onPlaybackReady() async { - if (!mounted || !widget.isCurrent) return; + if (!mounted || !widget.isCurrent) { + return; + } _notifier.onNativePlaybackReady(); // onPlaybackReady may be called multiple times, usually when more data // loads. If this is not the first time that the player has become ready, we // should not autoplay. - if (_isVideoReady) return; + if (_isVideoReady) { + return; + } setState(() => _isVideoReady = true); - if (ref.read(assetViewerProvider).showingDetails) return; + if (ref.read(assetViewerProvider).showingDetails) { + return; + } final autoPlayVideo = AppSetting.get(Setting.autoPlayVideo); - if (autoPlayVideo || widget.asset.isMotionPhoto) await _notifier.play(); + if (autoPlayVideo || widget.asset.isMotionPhoto) { + await _notifier.play(); + } } void _onPlaybackEnded() { - if (!mounted) return; + if (!mounted) { + return; + } _notifier.onNativePlaybackEnded(); @@ -162,12 +184,16 @@ class _NativeVideoViewerState extends ConsumerState with Widg } void _onPlaybackPositionChanged() { - if (!mounted) return; + if (!mounted) { + return; + } _notifier.onNativePositionChanged(); } void _onPlaybackStatusChanged() { - if (!mounted) return; + if (!mounted) { + return; + } _notifier.onNativeStatusChanged(); } @@ -180,10 +206,14 @@ class _NativeVideoViewerState extends ConsumerState with Widg void _loadVideo() async { final nc = _controller; - if (nc == null || nc.videoSource != null || !mounted) return; + if (nc == null || nc.videoSource != null || !mounted) { + return; + } final source = await _videoSource; - if (source == null || !mounted) return; + if (source == null || !mounted) { + return; + } await _notifier.load(source); final loopVideo = ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.loopVideo); @@ -192,7 +222,9 @@ class _NativeVideoViewerState extends ConsumerState with Widg } void _initController(NativeVideoPlayerController nc) { - if (_controller != null || !mounted) return; + if (_controller != null || !mounted) { + return; + } _notifier.attachController(nc); @@ -203,7 +235,9 @@ class _NativeVideoViewerState extends ConsumerState with Widg _controller = nc; - if (widget.isCurrent) _loadVideo(); + if (widget.isCurrent) { + _loadVideo(); + } } @override diff --git a/mobile/lib/presentation/widgets/images/local_image_provider.dart b/mobile/lib/presentation/widgets/images/local_image_provider.dart index d29a1cd56d..ed8289a66a 100644 --- a/mobile/lib/presentation/widgets/images/local_image_provider.dart +++ b/mobile/lib/presentation/widgets/images/local_image_provider.dart @@ -41,7 +41,9 @@ class LocalThumbProvider extends CancellableImageProvider @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } if (other is LocalThumbProvider) { return id == other.id; } @@ -148,7 +150,9 @@ class LocalFullImageProvider extends CancellableImageProvider @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } if (other is RemoteImageProvider) { return url == other.url && edited == other.edited; } @@ -175,7 +177,9 @@ class RemoteFullImageProvider extends CancellableImageProvider @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } if (other is ThumbHashProvider) { return thumbHash == other.thumbHash; } diff --git a/mobile/lib/presentation/widgets/images/thumbnail.widget.dart b/mobile/lib/presentation/widgets/images/thumbnail.widget.dart index 70a9057e12..18beb89b58 100644 --- a/mobile/lib/presentation/widgets/images/thumbnail.widget.dart +++ b/mobile/lib/presentation/widgets/images/thumbnail.widget.dart @@ -82,7 +82,9 @@ class _ThumbnailState extends State with SingleTickerProviderStateMix void _loadFromThumbhashProvider() { _stopListeningToThumbhashStream(); final thumbhashProvider = widget.thumbhashProvider; - if (thumbhashProvider == null || _providerImage != null) return; + if (thumbhashProvider == null || _providerImage != null) { + return; + } final thumbhashStream = _thumbhashStream = thumbhashProvider.resolve(ImageConfiguration.empty); final thumbhashStreamListener = _thumbhashStreamListener = ImageStreamListener( @@ -108,7 +110,9 @@ class _ThumbnailState extends State with SingleTickerProviderStateMix void _loadFromImageProvider() { _stopListeningToImageStream(); final imageProvider = widget.imageProvider; - if (imageProvider == null) return; + if (imageProvider == null) { + return; + } final imageStream = _imageStream = imageProvider.resolve(ImageConfiguration.empty); final imageStreamListener = _imageStreamListener = ImageStreamListener( @@ -201,7 +205,9 @@ class _ThumbnailState extends State with SingleTickerProviderStateMix bool _isVisible() { final renderObject = context.findRenderObject() as RenderBox?; - if (renderObject == null || !renderObject.attached) return false; + if (renderObject == null || !renderObject.attached) { + return false; + } final topLeft = renderObject.localToGlobal(Offset.zero); final bottomRight = renderObject.localToGlobal(Offset(renderObject.size.width, renderObject.size.height)); diff --git a/mobile/lib/presentation/widgets/memory/memory_card.widget.dart b/mobile/lib/presentation/widgets/memory/memory_card.widget.dart index 3df9c8074e..2f7a616632 100644 --- a/mobile/lib/presentation/widgets/memory/memory_card.widget.dart +++ b/mobile/lib/presentation/widgets/memory/memory_card.widget.dart @@ -54,7 +54,9 @@ class DriftMemoryCard extends StatelessWidget { } } - if (asset.isImage) return FullImage(asset, fit: fit, size: const Size(double.infinity, double.infinity)); + if (asset.isImage) { + return FullImage(asset, fit: fit, size: const Size(double.infinity, double.infinity)); + } return Center( child: AspectRatio( diff --git a/mobile/lib/presentation/widgets/search/quick_date_picker.dart b/mobile/lib/presentation/widgets/search/quick_date_picker.dart index 09b1cee700..e8bf3c5a43 100644 --- a/mobile/lib/presentation/widgets/search/quick_date_picker.dart +++ b/mobile/lib/presentation/widgets/search/quick_date_picker.dart @@ -136,7 +136,9 @@ class QuickDatePicker extends HookWidget { menuStyle: MenuStyle(maximumSize: WidgetStateProperty.all(Size(size.width, size.height * 0.5))), dropdownMenuEntries: _recentYears.map((e) => DropdownMenuEntry(value: e, label: e.toString())).toList(), onSelected: (year) { - if (year == null) return; + if (year == null) { + return; + } onSelect(YearFilter(year)); }, ), @@ -179,7 +181,9 @@ class QuickDatePicker extends HookWidget { child: SingleChildScrollView( child: RadioGroup( onChanged: (value) { - if (value == null) return; + if (value == null) { + return; + } final _ = switch (value) { _QuickPickerType.custom => onRequestPicker(), _QuickPickerType.last1Month => onSelect(RecentMonthRangeFilter(1)), diff --git a/mobile/lib/presentation/widgets/timeline/fixed/row.dart b/mobile/lib/presentation/widgets/timeline/fixed/row.dart index 97067add24..126254e687 100644 --- a/mobile/lib/presentation/widgets/timeline/fixed/row.dart +++ b/mobile/lib/presentation/widgets/timeline/fixed/row.dart @@ -77,7 +77,9 @@ class RenderFixedRow extends RenderBox double _height; set height(double value) { - if (_height == value) return; + if (_height == value) { + return; + } _height = value; markNeedsLayout(); } @@ -86,7 +88,9 @@ class RenderFixedRow extends RenderBox List _widths; set widths(List value) { - if (listEquals(_widths, value)) return; + if (listEquals(_widths, value)) { + return; + } _widths = value; markNeedsLayout(); } @@ -95,7 +99,9 @@ class RenderFixedRow extends RenderBox double _spacing; set spacing(double value) { - if (_spacing == value) return; + if (_spacing == value) { + return; + } _spacing = value; markNeedsLayout(); } @@ -104,7 +110,9 @@ class RenderFixedRow extends RenderBox TextDirection _textDirection; set textDirection(TextDirection value) { - if (_textDirection == value) return; + if (_textDirection == value) { + return; + } _textDirection = value; markNeedsLayout(); } diff --git a/mobile/lib/presentation/widgets/timeline/fixed/segment.model.dart b/mobile/lib/presentation/widgets/timeline/fixed/segment.model.dart index c62a4946c7..250cea8229 100644 --- a/mobile/lib/presentation/widgets/timeline/fixed/segment.model.dart +++ b/mobile/lib/presentation/widgets/timeline/fixed/segment.model.dart @@ -53,14 +53,18 @@ class FixedSegment extends Segment { @override int getMinChildIndexForScrollOffset(double scrollOffset) { final adjustedOffset = scrollOffset - gridOffset; - if (!adjustedOffset.isFinite || adjustedOffset < 0) return firstIndex; + if (!adjustedOffset.isFinite || adjustedOffset < 0) { + return firstIndex; + } return gridIndex + (adjustedOffset / mainAxisExtend).floor(); } @override int getMaxChildIndexForScrollOffset(double scrollOffset) { final adjustedOffset = scrollOffset - gridOffset; - if (!adjustedOffset.isFinite || adjustedOffset < 0) return firstIndex; + if (!adjustedOffset.isFinite || adjustedOffset < 0) { + return firstIndex; + } return gridIndex + (adjustedOffset / mainAxisExtend).ceil() - 1; } @@ -162,8 +166,12 @@ class _FixedSegmentRow extends ConsumerWidget { // 0.5: width < mean - threshold // 1.5: width > mean + threshold final arConfiguration = aspectRatios.map((e) { - if (e - meanAspectRatio > 0.3) return 1.5; - if (e - meanAspectRatio < -0.3) return 0.5; + if (e - meanAspectRatio > 0.3) { + return 1.5; + } + if (e - meanAspectRatio < -0.3) { + return 0.5; + } return 1.0; }); diff --git a/mobile/lib/presentation/widgets/timeline/scrubber.widget.dart b/mobile/lib/presentation/widgets/timeline/scrubber.widget.dart index f0dfef571c..c2905bcafa 100644 --- a/mobile/lib/presentation/widgets/timeline/scrubber.widget.dart +++ b/mobile/lib/presentation/widgets/timeline/scrubber.widget.dart @@ -104,7 +104,9 @@ class ScrubberState extends ConsumerState with TickerProviderStateMixi late ScrollController _scrollController; double get _currentOffset { - if (_scrollController.hasClients != true) return 0.0; + if (_scrollController.hasClients != true) { + return 0.0; + } return _scrollController.offset * _scrubberHeight / _scrollController.position.maxScrollExtent; } diff --git a/mobile/lib/presentation/widgets/timeline/segment.model.dart b/mobile/lib/presentation/widgets/timeline/segment.model.dart index bc5f974874..99bf7b0a4d 100644 --- a/mobile/lib/presentation/widgets/timeline/segment.model.dart +++ b/mobile/lib/presentation/widgets/timeline/segment.model.dart @@ -52,7 +52,9 @@ abstract class Segment { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is Segment && other.firstIndex == firstIndex && diff --git a/mobile/lib/presentation/widgets/timeline/timeline.widget.dart b/mobile/lib/presentation/widgets/timeline/timeline.widget.dart index 578bd37a23..6368bbeeea 100644 --- a/mobile/lib/presentation/widgets/timeline/timeline.widget.dart +++ b/mobile/lib/presentation/widgets/timeline/timeline.widget.dart @@ -201,7 +201,9 @@ class _SliverTimelineState extends ConsumerState<_SliverTimeline> { } void _restoreAssetPosition(_) { - if (_restoreAssetIndex == null) return; + if (_restoreAssetIndex == null) { + return; + } final asyncSegments = ref.read(timelineSegmentProvider); asyncSegments.whenData((segments) { @@ -329,7 +331,9 @@ class _SliverTimelineState extends ConsumerState<_SliverTimeline> { } void _handleDragAssetEnter(TimelineAssetIndex index) { - if (_dragAnchorIndex == null || !_dragging) return; + if (_dragAnchorIndex == null || !_dragging) { + return; + } final timelineService = ref.read(timelineServiceProvider); final dragAnchorIndex = _dragAnchorIndex!; @@ -399,7 +403,9 @@ class _SliverTimelineState extends ConsumerState<_SliverTimeline> { segments: segments, delegate: SliverChildBuilderDelegate( (ctx, index) { - if (index >= childCount) return null; + if (index >= childCount) { + return null; + } final segment = segments.findByIndex(index); return segment?.builder(ctx, index) ?? const SizedBox.shrink(); }, diff --git a/mobile/lib/presentation/widgets/timeline/timeline_drag_region.dart b/mobile/lib/presentation/widgets/timeline/timeline_drag_region.dart index 88d46b143f..9ffcc3b23b 100644 --- a/mobile/lib/presentation/widgets/timeline/timeline_drag_region.dart +++ b/mobile/lib/presentation/widgets/timeline/timeline_drag_region.dart @@ -81,11 +81,15 @@ class _TimelineDragRegionState extends State { TimelineAssetIndex? _getValueKeyAtPosition(Offset position) { final box = context.findAncestorRenderObjectOfType(); - if (box == null) return null; + if (box == null) { + return null; + } final hitTestResult = BoxHitTestResult(); final local = box.globalToLocal(position); - if (!box.hitTest(hitTestResult, position: local)) return null; + if (!box.hitTest(hitTestResult, position: local)) { + return null; + } return (hitTestResult.path.firstWhereOrNull((hit) => hit.target is _TimelineAssetIndexProxy)?.target as _TimelineAssetIndexProxy?) @@ -103,7 +107,9 @@ class _TimelineDragRegionState extends State { final initialHit = _getValueKeyAtPosition(event.globalPosition); anchorAsset = initialHit; - if (initialHit == null) return; + if (initialHit == null) { + return; + } if (anchorAsset != null) { widget.onStart?.call(anchorAsset!); @@ -117,8 +123,12 @@ class _TimelineDragRegionState extends State { } void _onLongPressMove(LongPressMoveUpdateDetails event) { - if (anchorAsset == null) return; - if (topScrollOffset == null || bottomScrollOffset == null) return; + if (anchorAsset == null) { + return; + } + if (topScrollOffset == null || bottomScrollOffset == null) { + return; + } final currentDy = event.localPosition.dy; @@ -138,7 +148,9 @@ class _TimelineDragRegionState extends State { } final currentlyTouchingAsset = _getValueKeyAtPosition(event.globalPosition); - if (currentlyTouchingAsset == null) return; + if (currentlyTouchingAsset == null) { + return; + } if (assetUnderPointer != currentlyTouchingAsset) { if (!scrollNotified) { @@ -202,7 +214,9 @@ class TimelineAssetIndex { @override bool operator ==(covariant TimelineAssetIndex other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.assetIndex == assetIndex && other.segmentIndex == segmentIndex; } diff --git a/mobile/lib/providers/app_life_cycle.provider.dart b/mobile/lib/providers/app_life_cycle.provider.dart index a5f67215a8..11e0dcd49c 100644 --- a/mobile/lib/providers/app_life_cycle.provider.dart +++ b/mobile/lib/providers/app_life_cycle.provider.dart @@ -65,7 +65,9 @@ class AppLifeCycleNotifier extends StateNotifier { Future _performResume() async { // no need to resume because app was never really paused - if (!_wasPaused) return; + if (!_wasPaused) { + return; + } _wasPaused = false; final isAuthenticated = _ref.read(authProvider).isAuthenticated; diff --git a/mobile/lib/providers/asset_viewer/asset_viewer.provider.dart b/mobile/lib/providers/asset_viewer/asset_viewer.provider.dart index 96ff5f704a..9f3b05b9b0 100644 --- a/mobile/lib/providers/asset_viewer/asset_viewer.provider.dart +++ b/mobile/lib/providers/asset_viewer/asset_viewer.provider.dart @@ -45,8 +45,12 @@ class AssetViewerState { @override bool operator ==(Object other) { - if (identical(this, other)) return true; - if (other.runtimeType != runtimeType) return false; + if (identical(this, other)) { + return true; + } + if (other.runtimeType != runtimeType) { + return false; + } return other is AssetViewerState && other.backgroundOpacity == backgroundOpacity && other.showingDetails == showingDetails && @@ -83,7 +87,9 @@ class AssetViewerStateNotifier extends Notifier { } void setAsset(BaseAsset asset) { - if (asset == state.currentAsset) return; + if (asset == state.currentAsset) { + return; + } state = state.copyWith(currentAsset: asset, stackIndex: 0); } @@ -138,6 +144,8 @@ final assetViewerProvider = NotifierProvider((ref) { ref.watch(assetViewerProvider.select((s) => s.currentAsset?.heroTag)); final asset = ref.read(assetViewerProvider).currentAsset; - if (asset == null) return const Stream.empty(); + if (asset == null) { + return const Stream.empty(); + } return ref.read(assetServiceProvider).watchAsset(asset); }); diff --git a/mobile/lib/providers/asset_viewer/video_player_provider.dart b/mobile/lib/providers/asset_viewer/video_player_provider.dart index 8093926873..463a1ac3d2 100644 --- a/mobile/lib/providers/asset_viewer/video_player_provider.dart +++ b/mobile/lib/providers/asset_viewer/video_player_provider.dart @@ -70,7 +70,9 @@ class VideoPlayerNotifier extends StateNotifier { } Future pause() async { - if (_controller == null) return; + if (_controller == null) { + return; + } _bufferingTimer?.cancel(); @@ -83,7 +85,9 @@ class VideoPlayerNotifier extends StateNotifier { } Future play() async { - if (_controller == null) return; + if (_controller == null) { + return; + } try { await _flushSeek(); @@ -97,18 +101,24 @@ class VideoPlayerNotifier extends StateNotifier { Future _flushSeek() async { final timer = _seekTimer; - if (timer == null || !timer.isActive) return; + if (timer == null || !timer.isActive) { + return; + } timer.cancel(); await _controller?.seekTo(state.position.inMilliseconds); } void seekTo(Duration position) { - if (_controller == null || state.position == position) return; + if (_controller == null || state.position == position) { + return; + } state = state.copyWith(position: position); - if (_seekTimer?.isActive ?? false) return; + if (_seekTimer?.isActive ?? false) { + return; + } _seekTimer = Timer(const Duration(milliseconds: 150), () { _controller?.seekTo(state.position.inMilliseconds); @@ -130,7 +140,9 @@ class VideoPlayerNotifier extends StateNotifier { /// Pauses playback and preserves the current status for later restoration. void hold() { - if (_holdStatus != null) return; + if (_holdStatus != null) { + return; + } _holdStatus = state.status; pause(); @@ -170,12 +182,16 @@ class VideoPlayerNotifier extends StateNotifier { } void onNativePlaybackReady() { - if (!mounted) return; + if (!mounted) { + return; + } final playbackInfo = _controller?.playbackInfo; final videoInfo = _controller?.videoInfo; - if (playbackInfo == null || videoInfo == null) return; + if (playbackInfo == null || videoInfo == null) { + return; + } state = state.copyWith( position: Duration(milliseconds: playbackInfo.position), @@ -185,15 +201,23 @@ class VideoPlayerNotifier extends StateNotifier { } void onNativePositionChanged() { - if (!mounted || (_seekTimer?.isActive ?? false)) return; + if (!mounted || (_seekTimer?.isActive ?? false)) { + return; + } final playbackInfo = _controller?.playbackInfo; - if (playbackInfo == null) return; + if (playbackInfo == null) { + return; + } final position = Duration(milliseconds: playbackInfo.position); - if (state.position == position) return; + if (state.position == position) { + return; + } - if (state.status == VideoPlaybackStatus.playing) _startBufferingTimer(); + if (state.status == VideoPlaybackStatus.playing) { + _startBufferingTimer(); + } state = state.copyWith( position: position, @@ -202,10 +226,14 @@ class VideoPlayerNotifier extends StateNotifier { } void onNativeStatusChanged() { - if (!mounted) return; + if (!mounted) { + return; + } final playbackInfo = _controller?.playbackInfo; - if (playbackInfo == null) return; + if (playbackInfo == null) { + return; + } final newStatus = _mapStatus(playbackInfo.status); switch (newStatus) { @@ -216,7 +244,9 @@ class VideoPlayerNotifier extends StateNotifier { onNativePlaybackEnded(); } - if (state.status != newStatus) state = state.copyWith(status: newStatus); + if (state.status != newStatus) { + state = state.copyWith(status: newStatus); + } } void onNativePlaybackEnded() { diff --git a/mobile/lib/providers/backup/drift_backup.provider.dart b/mobile/lib/providers/backup/drift_backup.provider.dart index 4507747c7d..bf2b7cae4a 100644 --- a/mobile/lib/providers/backup/drift_backup.provider.dart +++ b/mobile/lib/providers/backup/drift_backup.provider.dart @@ -73,7 +73,9 @@ class DriftUploadStatus { @override bool operator ==(covariant DriftUploadStatus other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.taskId == taskId && other.filename == filename && @@ -153,7 +155,9 @@ class DriftBackupState { @override bool operator ==(covariant DriftBackupState other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } final mapEquals = const DeepCollectionEquality().equals; return other.totalCount == totalCount && diff --git a/mobile/lib/providers/cleanup.provider.dart b/mobile/lib/providers/cleanup.provider.dart index c18185710e..e4a3d10a15 100644 --- a/mobile/lib/providers/cleanup.provider.dart +++ b/mobile/lib/providers/cleanup.provider.dart @@ -132,7 +132,9 @@ class CleanupNotifier extends StateNotifier { void applyDefaultAlbumSelections(List<(String id, String name)> albums) { final isInitialized = _metadataRepository.appConfig.cleanup.defaultsInitialized; - if (isInitialized) return; + if (isInitialized) { + return; + } final toKeep = _cleanupService.getDefaultKeepAlbumIds(albums); diff --git a/mobile/lib/providers/infrastructure/action.provider.dart b/mobile/lib/providers/infrastructure/action.provider.dart index d0d1d5d424..0e402575a0 100644 --- a/mobile/lib/providers/infrastructure/action.provider.dart +++ b/mobile/lib/providers/infrastructure/action.provider.dart @@ -518,7 +518,9 @@ extension on Iterable { Iterable toIds() => map((e) => e.id); Iterable ownedAssets(String? ownerId) { - if (ownerId == null) return const []; + if (ownerId == null) { + return const []; + } return whereType().where((a) => a.ownerId == ownerId); } } diff --git a/mobile/lib/providers/infrastructure/remote_album.provider.dart b/mobile/lib/providers/infrastructure/remote_album.provider.dart index 949e6d747e..b9a0e91ce5 100644 --- a/mobile/lib/providers/infrastructure/remote_album.provider.dart +++ b/mobile/lib/providers/infrastructure/remote_album.provider.dart @@ -24,7 +24,9 @@ class RemoteAlbumState { @override bool operator ==(covariant RemoteAlbumState other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } final listEquals = const DeepCollectionEquality().equals; return listEquals(other.albums, albums); diff --git a/mobile/lib/providers/infrastructure/user_metadata.provider.dart b/mobile/lib/providers/infrastructure/user_metadata.provider.dart index 9a463463f5..e5b9aa2a6e 100644 --- a/mobile/lib/providers/infrastructure/user_metadata.provider.dart +++ b/mobile/lib/providers/infrastructure/user_metadata.provider.dart @@ -11,7 +11,9 @@ final userMetadataRepository = Provider( final userMetadataProvider = FutureProvider>((ref) async { final repository = ref.watch(userMetadataRepository); final user = ref.watch(currentUserProvider); - if (user == null) return []; + if (user == null) { + return []; + } return repository.getUserMetadata(user.id); }); diff --git a/mobile/lib/providers/search/search_filter.provider.dart b/mobile/lib/providers/search/search_filter.provider.dart index 3040ecd808..b171de50c7 100644 --- a/mobile/lib/providers/search/search_filter.provider.dart +++ b/mobile/lib/providers/search/search_filter.provider.dart @@ -13,7 +13,9 @@ class SearchSuggestionArgs { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is SearchSuggestionArgs && other.type == type && diff --git a/mobile/lib/providers/sync_status.provider.dart b/mobile/lib/providers/sync_status.provider.dart index 203184fc87..8d7266abf7 100644 --- a/mobile/lib/providers/sync_status.provider.dart +++ b/mobile/lib/providers/sync_status.provider.dart @@ -56,7 +56,9 @@ class SyncStatusState { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is SyncStatusState && other.remoteSyncStatus == remoteSyncStatus && other.localSyncStatus == localSyncStatus && diff --git a/mobile/lib/providers/timeline/multiselect.provider.dart b/mobile/lib/providers/timeline/multiselect.provider.dart index 6e375f3852..10c8bb86b6 100644 --- a/mobile/lib/providers/timeline/multiselect.provider.dart +++ b/mobile/lib/providers/timeline/multiselect.provider.dart @@ -48,7 +48,9 @@ class MultiSelectState { @override bool operator ==(covariant MultiSelectState other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } final setEquals = const DeepCollectionEquality().equals; return setEquals(other.selectedAssets, selectedAssets) && @@ -124,7 +126,9 @@ class MultiSelectNotifier extends Notifier { } void toggleBucketSelectionByAssets(List bucketAssets) { - if (bucketAssets.isEmpty) return; + if (bucketAssets.isEmpty) { + return; + } // Check if all assets in this bucket are currently selected final allSelected = bucketAssets.every((asset) => state.selectedAssets.contains(asset)); @@ -150,7 +154,9 @@ class MultiSelectNotifier extends Notifier { final bucketSelectionProvider = Provider.family>((ref, bucketAssets) { final selectedAssets = ref.watch(multiSelectProvider.select((s) => s.selectedAssets)); - if (bucketAssets.isEmpty) return false; + if (bucketAssets.isEmpty) { + return false; + } // Check if all assets in the bucket are selected return bucketAssets.every((asset) => selectedAssets.contains(asset)); diff --git a/mobile/lib/providers/upload_profile_image.provider.dart b/mobile/lib/providers/upload_profile_image.provider.dart index a2b7a23f05..77772b0205 100644 --- a/mobile/lib/providers/upload_profile_image.provider.dart +++ b/mobile/lib/providers/upload_profile_image.provider.dart @@ -46,7 +46,9 @@ class UploadProfileImageState { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is UploadProfileImageState && other.status == status && other.profileImagePath == profileImagePath; } diff --git a/mobile/lib/providers/websocket.provider.dart b/mobile/lib/providers/websocket.provider.dart index 60afcec2d2..5450120316 100644 --- a/mobile/lib/providers/websocket.provider.dart +++ b/mobile/lib/providers/websocket.provider.dart @@ -29,7 +29,9 @@ class WebsocketState { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is WebsocketState && other.socket == socket && other.isConnected == isConnected; } @@ -58,7 +60,9 @@ class WebsocketNotifier extends StateNotifier { /// Connects websocket to server unless already connected void connect() { - if (state.isConnected) return; + if (state.isConnected) { + return; + } final authenticationState = _ref.read(authProvider); if (authenticationState.isAuthenticated) { diff --git a/mobile/lib/repositories/api.repository.dart b/mobile/lib/repositories/api.repository.dart index 646e2480e9..8a5c690b3b 100644 --- a/mobile/lib/repositories/api.repository.dart +++ b/mobile/lib/repositories/api.repository.dart @@ -3,7 +3,9 @@ import 'package:immich_mobile/constants/errors.dart'; abstract class ApiRepository { Future checkNull(Future future) async { final response = await future; - if (response == null) throw const NoResponseDtoError(); + if (response == null) { + throw const NoResponseDtoError(); + } return response; } } diff --git a/mobile/lib/repositories/auth_api.repository.dart b/mobile/lib/repositories/auth_api.repository.dart index 4b0880ddcf..446aba68b3 100644 --- a/mobile/lib/repositories/auth_api.repository.dart +++ b/mobile/lib/repositories/auth_api.repository.dart @@ -25,7 +25,9 @@ class AuthApiRepository extends ApiRepository { } Future logout() async { - if (_apiService.apiClient.basePath.isEmpty) return; + if (_apiService.apiClient.basePath.isEmpty) { + return; + } await _apiService.authenticationApi.logout().timeout(const Duration(seconds: 7)); } diff --git a/mobile/lib/repositories/upload.repository.dart b/mobile/lib/repositories/upload.repository.dart index 98c6202e19..68522490d8 100644 --- a/mobile/lib/repositories/upload.repository.dart +++ b/mobile/lib/repositories/upload.repository.dart @@ -161,7 +161,9 @@ class ProgressMultipartRequest extends MultipartRequest with Abortable { @override ByteStream finalize() { final byteStream = super.finalize(); - if (onProgress == null) return byteStream; + if (onProgress == null) { + return byteStream; + } final total = contentLength; var bytes = 0; diff --git a/mobile/lib/services/api.service.dart b/mobile/lib/services/api.service.dart index ec4720f313..33c87798a1 100644 --- a/mobile/lib/services/api.service.dart +++ b/mobile/lib/services/api.service.dart @@ -186,7 +186,9 @@ class ApiService { final List list = jsonDecode(externalJson); for (final entry in list) { final url = AuxilaryEndpoint.fromJson(entry).url; - if (url.isNotEmpty) urls.add(url); + if (url.isNotEmpty) { + urls.add(url); + } } } return urls; diff --git a/mobile/lib/services/background_upload.service.dart b/mobile/lib/services/background_upload.service.dart index d54a677c24..92be0bfb7f 100644 --- a/mobile/lib/services/background_upload.service.dart +++ b/mobile/lib/services/background_upload.service.dart @@ -82,7 +82,9 @@ class UploadTaskMetadata { @override bool operator ==(covariant UploadTaskMetadata other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other.localAssetId == localAssetId && other.isLivePhotos == isLivePhotos && diff --git a/mobile/lib/services/deep_link.service.dart b/mobile/lib/services/deep_link.service.dart index 5ff0fa8a4d..3d2d702917 100644 --- a/mobile/lib/services/deep_link.service.dart +++ b/mobile/lib/services/deep_link.service.dart @@ -104,7 +104,9 @@ class DeepLinkService { // Deep link resolution failed, safely handle it based on the app state if (deepLinkRoute == null) { - if (isColdStart) return DeepLink.defaultPath; + if (isColdStart) { + return DeepLink.defaultPath; + } return DeepLink.none; } diff --git a/mobile/lib/services/folder.service.dart b/mobile/lib/services/folder.service.dart index bf7590ce54..543c7231d6 100644 --- a/mobile/lib/services/folder.service.dart +++ b/mobile/lib/services/folder.service.dart @@ -21,7 +21,9 @@ class FolderService { Map> folderMap = {}; for (String fullPath in paths) { - if (fullPath == '/') continue; + if (fullPath == '/') { + continue; + } // Ensure the path starts with a slash if (!fullPath.startsWith('/')) { diff --git a/mobile/lib/utils/bytes_units.dart b/mobile/lib/utils/bytes_units.dart index 66de6493ab..5eb15221fe 100644 --- a/mobile/lib/utils/bytes_units.dart +++ b/mobile/lib/utils/bytes_units.dart @@ -18,7 +18,9 @@ String formatBytes(int bytes) { } String formatHumanReadableBytes(int bytes, int decimals) { - if (bytes <= 0) return "0 B"; + if (bytes <= 0) { + return "0 B"; + } const suffixes = ["B", "KiB", "MiB", "GiB", "TiB"]; var i = (log(bytes) / log(1024)).floor(); return '${(bytes / pow(1024, i)).toStringAsFixed(decimals)} ${suffixes[i]}'; diff --git a/mobile/lib/utils/migration.dart b/mobile/lib/utils/migration.dart index b3da549f98..8fcc5e7a6b 100644 --- a/mobile/lib/utils/migration.dart +++ b/mobile/lib/utils/migration.dart @@ -32,10 +32,14 @@ Future migrateDatabaseIfNeeded(Drift drift) async { Future _migrateTo25() async { final accessToken = Store.tryGet(StoreKey.accessToken); - if (accessToken == null || accessToken.isEmpty) return; + if (accessToken == null || accessToken.isEmpty) { + return; + } final serverUrls = ApiService.getServerUrls(); - if (serverUrls.isEmpty) return; + if (serverUrls.isEmpty) { + return; + } await NetworkRepository.setHeaders(ApiService.getRequestHeaders(), serverUrls, token: accessToken); } @@ -79,7 +83,9 @@ class _StoreMigrator { Future migrateEnumIndex(StoreKey legacyKey, MetadataKey newKey, List values) async { final index = await readLegacyStoreInt(legacyKey.id); - if (index == null) return; + if (index == null) { + return; + } final enumValue = values.elementAtOrNull(index) ?? newKey.defaultValue; _cache[newKey] = enumValue; @@ -92,7 +98,9 @@ class _StoreMigrator { List values, ) async { final name = await readLegacyStoreString(legacyKey.id); - if (name == null) return; + if (name == null) { + return; + } final enumValue = values.firstWhere((e) => e.name == name, orElse: () => newKey.defaultValue); _cache[newKey] = enumValue; @@ -101,7 +109,9 @@ class _StoreMigrator { Future migrateBool(StoreKey legacyKey, MetadataKey newKey) async { final intValue = await readLegacyStoreInt(legacyKey.id); - if (intValue == null) return; + if (intValue == null) { + return; + } final boolValue = intValue != 0; _cache[newKey] = boolValue; @@ -110,7 +120,9 @@ class _StoreMigrator { Future migrateInt(StoreKey legacyKey, MetadataKey newKey) async { final intValue = await readLegacyStoreInt(legacyKey.id); - if (intValue == null) return; + if (intValue == null) { + return; + } _cache[newKey] = intValue; _migratedStoreIds.add(legacyKey.id); @@ -140,7 +152,9 @@ class _StoreMigrator { } Future deleteLegacyStoreRows(List ids) async { - if (ids.isEmpty) return; + if (ids.isEmpty) { + return; + } await (_db.storeEntity.delete()..where((t) => t.id.isIn(ids))).go(); } } diff --git a/mobile/lib/utils/semver.dart b/mobile/lib/utils/semver.dart index aebfd2fe4c..06b186daa3 100644 --- a/mobile/lib/utils/semver.dart +++ b/mobile/lib/utils/semver.dart @@ -63,7 +63,9 @@ class SemVer { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is SemVer && other.major == major && other.minor == minor && other.patch == patch; } diff --git a/mobile/lib/utils/url_helper.dart b/mobile/lib/utils/url_helper.dart index e3d5b8ed57..fc3b4bbb3f 100644 --- a/mobile/lib/utils/url_helper.dart +++ b/mobile/lib/utils/url_helper.dart @@ -42,13 +42,17 @@ String? getServerUrl() { /// String punycodeEncodeUrl(String serverUrl) { final serverUri = Uri.tryParse(serverUrl); - if (serverUri == null || serverUri.host.isEmpty) return ''; + if (serverUri == null || serverUri.host.isEmpty) { + return ''; + } final encodedHost = Uri.decodeComponent(serverUri.host) .split('.') .map((segment) { // If segment is already ASCII, then return as it is. - if (segment.runes.every((c) => c < 0x80)) return segment; + if (segment.runes.every((c) => c < 0x80)) { + return segment; + } return 'xn--${punycodeEncode(segment)}'; }) .join('.'); @@ -75,7 +79,9 @@ String punycodeEncodeUrl(String serverUrl) { /// String? punycodeDecodeUrl(String? serverUrl) { final serverUri = serverUrl != null ? Uri.tryParse(serverUrl) : null; - if (serverUri == null || serverUri.host.isEmpty) return null; + if (serverUri == null || serverUri.host.isEmpty) { + return null; + } final decodedHost = serverUri.host .split('.') diff --git a/mobile/lib/widgets/activities/comment_bubble.dart b/mobile/lib/widgets/activities/comment_bubble.dart index 22cb0586bc..95cff7b87d 100644 --- a/mobile/lib/widgets/activities/comment_bubble.dart +++ b/mobile/lib/widgets/activities/comment_bubble.dart @@ -35,7 +35,9 @@ class CommentBubble extends ConsumerWidget { Future openAssetViewer() async { final activityService = ref.read(activityServiceProvider); final route = await activityService.buildAssetViewerRoute(activity.assetId!, ref); - if (route != null) await context.pushRoute(route); + if (route != null) { + await context.pushRoute(route); + } } // avatar (hidden for own messages) diff --git a/mobile/lib/widgets/asset_viewer/video_controls.dart b/mobile/lib/widgets/asset_viewer/video_controls.dart index 02b2d927b5..0f1e0e020d 100644 --- a/mobile/lib/widgets/asset_viewer/video_controls.dart +++ b/mobile/lib/widgets/asset_viewer/video_controls.dart @@ -49,7 +49,9 @@ class _VideoControlsState extends ConsumerState { } void _onHideTimer() { - if (!mounted) return; + if (!mounted) { + return; + } if (ref.read(_provider).status == VideoPlaybackStatus.playing) { ref.read(assetViewerProvider.notifier).setControls(false); } @@ -91,7 +93,9 @@ class _VideoControlsState extends ConsumerState { final isFinished = !isCasting && videoStatus == VideoPlaybackStatus.completed; ref.listen(assetViewerProvider.select((v) => v.showingControls), (prev, showing) { - if (showing && prev != showing) _hideTimer.reset(); + if (showing && prev != showing) { + _hideTimer.reset(); + } }); ref.listen(_provider.select((v) => v.status), (_, __) => _hideTimer.reset()); diff --git a/mobile/lib/widgets/common/date_time_picker.dart b/mobile/lib/widgets/common/date_time_picker.dart index 9cc8de29ee..0ebd7bba93 100644 --- a/mobile/lib/widgets/common/date_time_picker.dart +++ b/mobile/lib/widgets/common/date_time_picker.dart @@ -190,7 +190,9 @@ class _TimeZoneOffset implements Comparable<_TimeZoneOffset> { @override bool operator ==(Object other) { - if (identical(this, other)) return true; + if (identical(this, other)) { + return true; + } return other is _TimeZoneOffset && other.display == display && other.offsetInMilliseconds == offsetInMilliseconds; } diff --git a/mobile/lib/widgets/forms/login/login_form.dart b/mobile/lib/widgets/forms/login/login_form.dart index fb3b9c5977..d53cf1d1d2 100644 --- a/mobile/lib/widgets/forms/login/login_form.dart +++ b/mobile/lib/widgets/forms/login/login_form.dart @@ -40,7 +40,9 @@ class LoginForm extends HookConsumerWidget { final log = Logger('LoginForm'); String? _validateUrl(String? url) { - if (url == null || url.isEmpty) return null; + if (url == null || url.isEmpty) { + return null; + } final parsedUrl = Uri.tryParse(url); if (parsedUrl == null || !parsedUrl.isAbsolute || !parsedUrl.scheme.startsWith("http") || parsedUrl.host.isEmpty) { @@ -51,9 +53,15 @@ class LoginForm extends HookConsumerWidget { } String? _validateEmail(String? email) { - if (email == null || email == '') return null; - if (email.endsWith(' ')) return 'login_form_err_trailing_whitespace'.tr(); - if (email.startsWith(' ')) return 'login_form_err_leading_whitespace'.tr(); + if (email == null || email == '') { + return null; + } + if (email.endsWith(' ')) { + return 'login_form_err_trailing_whitespace'.tr(); + } + if (email.startsWith(' ')) { + return 'login_form_err_leading_whitespace'.tr(); + } if (email.contains(' ') || !email.contains('@')) { return 'login_form_err_invalid_email'.tr(); } diff --git a/mobile/lib/widgets/search/search_filter/star_rating_picker.dart b/mobile/lib/widgets/search/search_filter/star_rating_picker.dart index 5591b0e264..917d56e802 100644 --- a/mobile/lib/widgets/search/search_filter/star_rating_picker.dart +++ b/mobile/lib/widgets/search/search_filter/star_rating_picker.dart @@ -15,7 +15,9 @@ class StarRatingPicker extends HookWidget { return RadioGroup( groupValue: selectedRating.value?.rating, onChanged: (int? newValue) { - if (newValue == null) return; + if (newValue == null) { + return; + } final newFilter = SearchRatingFilter(rating: newValue); selectedRating.value = newFilter; onSelect(newFilter); diff --git a/mobile/lib/widgets/settings/backup_settings/drift_backup_settings.dart b/mobile/lib/widgets/settings/backup_settings/drift_backup_settings.dart index c7264ada59..7ec4b21c1f 100644 --- a/mobile/lib/widgets/settings/backup_settings/drift_backup_settings.dart +++ b/mobile/lib/widgets/settings/backup_settings/drift_backup_settings.dart @@ -74,7 +74,9 @@ class _AlbumSyncActionButtonState extends ConsumerState<_AlbumSyncActionButton> } catch (_) { } finally { Future.delayed(const Duration(seconds: 1), () { - if (!mounted) return; + if (!mounted) { + return; + } setState(() { isAlbumSyncInProgress = false; }); diff --git a/mobile/lib/widgets/settings/free_up_space_settings.dart b/mobile/lib/widgets/settings/free_up_space_settings.dart index 01ee8426d0..da14933997 100644 --- a/mobile/lib/widgets/settings/free_up_space_settings.dart +++ b/mobile/lib/widgets/settings/free_up_space_settings.dart @@ -80,7 +80,9 @@ class _FreeUpSpaceSettingsState extends ConsumerState { bool _isPresetSelected(int? daysAgo) { final state = ref.read(cleanupProvider); - if (state.selectedDate == null) return false; + if (state.selectedDate == null) { + return false; + } final expectedDate = daysAgo != null ? DateTime.now().subtract(Duration(days: daysAgo)) : DateTime(2000); diff --git a/mobile/lib/widgets/settings/settings_switch_list_tile.dart b/mobile/lib/widgets/settings/settings_switch_list_tile.dart index f5d6dfd05a..d8ed3ac017 100644 --- a/mobile/lib/widgets/settings/settings_switch_list_tile.dart +++ b/mobile/lib/widgets/settings/settings_switch_list_tile.dart @@ -29,7 +29,9 @@ class SettingsSwitchListTile extends StatelessWidget { @override Widget build(BuildContext context) { void onSwitchChanged(bool value) { - if (!enabled) return; + if (!enabled) { + return; + } valueNotifier.value = value; onChanged?.call(value); diff --git a/mobile/lib/wm_executor.dart b/mobile/lib/wm_executor.dart index a10b651696..2eb31fe300 100644 --- a/mobile/lib/wm_executor.dart +++ b/mobile/lib/wm_executor.dart @@ -43,7 +43,9 @@ mixin _ExecutorLogger on Mixinable<_Executor> { } void logMessage(String message) { - if (log) print(message); + if (log) { + print(message); + } } } @@ -219,7 +221,9 @@ class _Executor extends Mixinable<_Executor> with _ExecutorLogger { _ensureWorkersInitialized(); return; } - if (_queue.isEmpty) return; + if (_queue.isEmpty) { + return; + } final task = _queue.removeFirst(); availableWorker @@ -235,7 +239,9 @@ class _Executor extends Mixinable<_Executor> with _ExecutorLogger { }, ) .whenComplete(() { - if (_dynamicSpawning && _queue.isEmpty) availableWorker.kill(); + if (_dynamicSpawning && _queue.isEmpty) { + availableWorker.kill(); + } _schedule(); }); } @@ -249,7 +255,9 @@ class _Executor extends Mixinable<_Executor> with _ExecutorLogger { targetWorker?.cancelGentle(); } else { targetWorker?.kill(); - if (!_dynamicSpawning) targetWorker?.initialize(); + if (!_dynamicSpawning) { + targetWorker?.initialize(); + } } super._cancel(task); } diff --git a/mobile/packages/ui/test/formatted_text_test.dart b/mobile/packages/ui/test/formatted_text_test.dart index 54ef343727..c3901cd802 100644 --- a/mobile/packages/ui/test/formatted_text_test.dart +++ b/mobile/packages/ui/test/formatted_text_test.dart @@ -10,7 +10,9 @@ List _getContentSpans(WidgetTester tester) { final richText = tester.widget(find.byType(RichText)); final root = richText.text as TextSpan; final wrapper = root.children?.firstOrNull; - if (wrapper is TextSpan) return wrapper.children ?? []; + if (wrapper is TextSpan) { + return wrapper.children ?? []; + } return []; }