You've already forked immich
							
							
				mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 00:18:28 +02:00 
			
		
		
		
	chore(mobile): clean up linter problems (#1000)
This commit is contained in:
		| @@ -69,7 +69,10 @@ class AlbumService { | ||||
|     Iterable<Asset> assets, | ||||
|   ) async { | ||||
|     return createAlbum( | ||||
|         _getNextAlbumName(await getAlbums(isShared: false)), assets, []); | ||||
|       _getNextAlbumName(await getAlbums(isShared: false)), | ||||
|       assets, | ||||
|       [], | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   Future<AlbumResponseDto?> getAlbumDetail(String albumId) async { | ||||
|   | ||||
| @@ -34,7 +34,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|     final newAlbumTitle = ref.watch(albumViewerProvider).editTitleText; | ||||
|     final isEditAlbum = ref.watch(albumViewerProvider).isEditAlbum; | ||||
|  | ||||
|     void _onDeleteAlbumPressed(String albumId) async { | ||||
|     void onDeleteAlbumPressed(String albumId) async { | ||||
|       ImmichLoadingOverlayController.appLoader.show(); | ||||
|  | ||||
|       bool isSuccess = | ||||
| @@ -62,7 +62,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|       ImmichLoadingOverlayController.appLoader.hide(); | ||||
|     } | ||||
|  | ||||
|     void _onLeaveAlbumPressed(String albumId) async { | ||||
|     void onLeaveAlbumPressed(String albumId) async { | ||||
|       ImmichLoadingOverlayController.appLoader.show(); | ||||
|  | ||||
|       bool isSuccess = | ||||
| @@ -84,7 +84,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|       ImmichLoadingOverlayController.appLoader.hide(); | ||||
|     } | ||||
|  | ||||
|     void _onRemoveFromAlbumPressed(String albumId) async { | ||||
|     void onRemoveFromAlbumPressed(String albumId) async { | ||||
|       ImmichLoadingOverlayController.appLoader.show(); | ||||
|  | ||||
|       bool isSuccess = | ||||
| @@ -110,7 +110,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|       ImmichLoadingOverlayController.appLoader.hide(); | ||||
|     } | ||||
|  | ||||
|     _buildBottomSheetActionButton() { | ||||
|     buildBottomSheetActionButton() { | ||||
|       if (isMultiSelectionEnable) { | ||||
|         if (albumInfo.ownerId == userId) { | ||||
|           return ListTile( | ||||
| @@ -119,7 +119,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|               'album_viewer_appbar_share_remove', | ||||
|               style: TextStyle(fontWeight: FontWeight.bold), | ||||
|             ).tr(), | ||||
|             onTap: () => _onRemoveFromAlbumPressed(albumId), | ||||
|             onTap: () => onRemoveFromAlbumPressed(albumId), | ||||
|           ); | ||||
|         } else { | ||||
|           return const SizedBox(); | ||||
| @@ -132,7 +132,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|               'album_viewer_appbar_share_delete', | ||||
|               style: TextStyle(fontWeight: FontWeight.bold), | ||||
|             ).tr(), | ||||
|             onTap: () => _onDeleteAlbumPressed(albumId), | ||||
|             onTap: () => onDeleteAlbumPressed(albumId), | ||||
|           ); | ||||
|         } else { | ||||
|           return ListTile( | ||||
| @@ -141,13 +141,13 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|               'album_viewer_appbar_share_leave', | ||||
|               style: TextStyle(fontWeight: FontWeight.bold), | ||||
|             ).tr(), | ||||
|             onTap: () => _onLeaveAlbumPressed(albumId), | ||||
|             onTap: () => onLeaveAlbumPressed(albumId), | ||||
|           ); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     void _buildBottomSheet() { | ||||
|     void buildBottomSheet() { | ||||
|       showModalBottomSheet( | ||||
|         backgroundColor: Theme.of(context).scaffoldBackgroundColor, | ||||
|         isScrollControlled: false, | ||||
| @@ -157,7 +157,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|             child: Column( | ||||
|               mainAxisSize: MainAxisSize.min, | ||||
|               children: [ | ||||
|                 _buildBottomSheetActionButton(), | ||||
|                 buildBottomSheetActionButton(), | ||||
|               ], | ||||
|             ), | ||||
|           ); | ||||
| @@ -165,7 +165,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildLeadingButton() { | ||||
|     buildLeadingButton() { | ||||
|       if (isMultiSelectionEnable) { | ||||
|         return IconButton( | ||||
|           onPressed: () => ref | ||||
| @@ -204,7 +204,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|  | ||||
|     return AppBar( | ||||
|       elevation: 0, | ||||
|       leading: _buildLeadingButton(), | ||||
|       leading: buildLeadingButton(), | ||||
|       title: isMultiSelectionEnable | ||||
|           ? Text('${selectedAssetsInAlbum.length}') | ||||
|           : null, | ||||
| @@ -212,7 +212,7 @@ class AlbumViewerAppbar extends HookConsumerWidget with PreferredSizeWidget { | ||||
|       actions: [ | ||||
|         IconButton( | ||||
|           splashRadius: 25, | ||||
|           onPressed: _buildBottomSheet, | ||||
|           onPressed: buildBottomSheet, | ||||
|           icon: const Icon(Icons.more_horiz_rounded), | ||||
|         ), | ||||
|       ], | ||||
|   | ||||
| @@ -27,7 +27,7 @@ class AlbumViewerThumbnail extends HookConsumerWidget { | ||||
|     final isMultiSelectionEnable = | ||||
|         ref.watch(assetSelectionProvider).isMultiselectEnable; | ||||
|  | ||||
|     _viewAsset() { | ||||
|     viewAsset() { | ||||
|       AutoRouter.of(context).push( | ||||
|         GalleryViewerRoute( | ||||
|           asset: asset, | ||||
| @@ -47,18 +47,18 @@ class AlbumViewerThumbnail extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     _enableMultiSelection() { | ||||
|     enableMultiSelection() { | ||||
|       ref.watch(assetSelectionProvider.notifier).enableMultiselection(); | ||||
|       ref | ||||
|           .watch(assetSelectionProvider.notifier) | ||||
|           .addAssetsInAlbumViewer([asset]); | ||||
|     } | ||||
|  | ||||
|     _disableMultiSelection() { | ||||
|     disableMultiSelection() { | ||||
|       ref.watch(assetSelectionProvider.notifier).disableMultiselection(); | ||||
|     } | ||||
|  | ||||
|     _buildVideoLabel() { | ||||
|     buildVideoLabel() { | ||||
|       return Positioned( | ||||
|         top: 5, | ||||
|         right: 5, | ||||
| @@ -80,7 +80,7 @@ class AlbumViewerThumbnail extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildAssetStoreLocationIcon() { | ||||
|     buildAssetStoreLocationIcon() { | ||||
|       return Positioned( | ||||
|         right: 10, | ||||
|         bottom: 5, | ||||
| @@ -94,7 +94,7 @@ class AlbumViewerThumbnail extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildAssetSelectionIcon() { | ||||
|     buildAssetSelectionIcon() { | ||||
|       bool isSelected = selectedAssetsInAlbumViewer.contains(asset); | ||||
|  | ||||
|       return Positioned( | ||||
| @@ -112,21 +112,21 @@ class AlbumViewerThumbnail extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildThumbnailImage() { | ||||
|     buildThumbnailImage() { | ||||
|       return Container( | ||||
|         decoration: BoxDecoration(border: drawBorderColor()), | ||||
|         child: ImmichImage(asset, width: 300, height: 300), | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _handleSelectionGesture() { | ||||
|     handleSelectionGesture() { | ||||
|       if (selectedAssetsInAlbumViewer.contains(asset)) { | ||||
|         ref | ||||
|             .watch(assetSelectionProvider.notifier) | ||||
|             .removeAssetsInAlbumViewer([asset]); | ||||
|  | ||||
|         if (selectedAssetsInAlbumViewer.isEmpty) { | ||||
|           _disableMultiSelection(); | ||||
|           disableMultiSelection(); | ||||
|         } | ||||
|       } else { | ||||
|         ref | ||||
| @@ -136,14 +136,14 @@ class AlbumViewerThumbnail extends HookConsumerWidget { | ||||
|     } | ||||
|  | ||||
|     return GestureDetector( | ||||
|       onTap: isMultiSelectionEnable ? _handleSelectionGesture : _viewAsset, | ||||
|       onLongPress: _enableMultiSelection, | ||||
|       onTap: isMultiSelectionEnable ? handleSelectionGesture : viewAsset, | ||||
|       onLongPress: enableMultiSelection, | ||||
|       child: Stack( | ||||
|         children: [ | ||||
|           _buildThumbnailImage(), | ||||
|           if (showStorageIndicator) _buildAssetStoreLocationIcon(), | ||||
|           if (!asset.isImage) _buildVideoLabel(), | ||||
|           if (isMultiSelectionEnable) _buildAssetSelectionIcon(), | ||||
|           buildThumbnailImage(), | ||||
|           if (showStorageIndicator) buildAssetStoreLocationIcon(), | ||||
|           if (!asset.isImage) buildVideoLabel(), | ||||
|           if (isMultiSelectionEnable) buildAssetSelectionIcon(), | ||||
|         ], | ||||
|       ), | ||||
|     ); | ||||
|   | ||||
| @@ -21,7 +21,7 @@ class MonthGroupTitle extends HookConsumerWidget { | ||||
|         ref.watch(assetSelectionProvider).selectedNewAssetsForAlbum; | ||||
|     final isAlbumExist = ref.watch(assetSelectionProvider).isAlbumExist; | ||||
|  | ||||
|     _handleTitleIconClick() { | ||||
|     handleTitleIconClick() { | ||||
|       HapticFeedback.heavyImpact(); | ||||
|  | ||||
|       if (isAlbumExist) { | ||||
| @@ -61,7 +61,7 @@ class MonthGroupTitle extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     _getSimplifiedMonth() { | ||||
|     getSimplifiedMonth() { | ||||
|       var monthAndYear = month.split(','); | ||||
|       var yearText = monthAndYear[1].trim(); | ||||
|       var monthText = monthAndYear[0].trim(); | ||||
| @@ -85,7 +85,7 @@ class MonthGroupTitle extends HookConsumerWidget { | ||||
|         child: Row( | ||||
|           children: [ | ||||
|             GestureDetector( | ||||
|               onTap: _handleTitleIconClick, | ||||
|               onTap: handleTitleIconClick, | ||||
|               child: selectedDateGroup.contains(month) | ||||
|                   ? Icon( | ||||
|                       Icons.check_circle_rounded, | ||||
| @@ -97,11 +97,11 @@ class MonthGroupTitle extends HookConsumerWidget { | ||||
|                     ), | ||||
|             ), | ||||
|             GestureDetector( | ||||
|               onTap: _handleTitleIconClick, | ||||
|               onTap: handleTitleIconClick, | ||||
|               child: Padding( | ||||
|                 padding: const EdgeInsets.only(left: 8.0), | ||||
|                 child: Text( | ||||
|                   _getSimplifiedMonth(), | ||||
|                   getSimplifiedMonth(), | ||||
|                   style: TextStyle( | ||||
|                     fontSize: 24, | ||||
|                     color: Theme.of(context).primaryColor, | ||||
|   | ||||
| @@ -18,7 +18,7 @@ class SelectionThumbnailImage extends HookConsumerWidget { | ||||
|         ref.watch(assetSelectionProvider).selectedAdditionalAssetsForAlbum; | ||||
|     var isAlbumExist = ref.watch(assetSelectionProvider).isAlbumExist; | ||||
|  | ||||
|     Widget _buildSelectionIcon(Asset asset) { | ||||
|     Widget buildSelectionIcon(Asset asset) { | ||||
|       var isSelected = selectedAsset.map((item) => item.id).contains(asset.id); | ||||
|       var isNewlySelected = | ||||
|           newAssetsForAlbum.map((item) => item.id).contains(asset.id); | ||||
| @@ -111,7 +111,7 @@ class SelectionThumbnailImage extends HookConsumerWidget { | ||||
|             padding: const EdgeInsets.all(3.0), | ||||
|             child: Align( | ||||
|               alignment: Alignment.topLeft, | ||||
|               child: _buildSelectionIcon(asset), | ||||
|               child: buildSelectionIcon(asset), | ||||
|             ), | ||||
|           ), | ||||
|           if (!asset.isImage) | ||||
|   | ||||
| @@ -37,7 +37,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|  | ||||
|     /// Find out if the assets in album exist on the device | ||||
|     /// If they exist, add to selected asset state to show they are already selected. | ||||
|     void _onAddPhotosPressed(AlbumResponseDto albumInfo) async { | ||||
|     void onAddPhotosPressed(AlbumResponseDto albumInfo) async { | ||||
|       if (albumInfo.assets.isNotEmpty == true) { | ||||
|         ref.watch(assetSelectionProvider.notifier).addNewAssets( | ||||
|               albumInfo.assets.map((e) => Asset.remote(e)).toList(), | ||||
| @@ -60,7 +60,8 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|                     albumId, | ||||
|                   ); | ||||
|  | ||||
|           if (addAssetsResult != null && addAssetsResult.successfullyAdded > 0) { | ||||
|           if (addAssetsResult != null && | ||||
|               addAssetsResult.successfullyAdded > 0) { | ||||
|             ref.refresh(sharedAlbumDetailProvider(albumId)); | ||||
|           } | ||||
|  | ||||
| @@ -73,7 +74,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     void _onAddUsersPressed(AlbumResponseDto albumInfo) async { | ||||
|     void onAddUsersPressed(AlbumResponseDto albumInfo) async { | ||||
|       List<String>? sharedUserIds = | ||||
|           await AutoRouter.of(context).push<List<String>?>( | ||||
|         SelectAdditionalUserForSharingRoute(albumInfo: albumInfo), | ||||
| @@ -94,7 +95,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     Widget _buildTitle(AlbumResponseDto albumInfo) { | ||||
|     Widget buildTitle(AlbumResponseDto albumInfo) { | ||||
|       return Padding( | ||||
|         padding: const EdgeInsets.only(left: 8, right: 8, top: 16), | ||||
|         child: userId == albumInfo.ownerId | ||||
| @@ -115,7 +116,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     Widget _buildAlbumDateRange(AlbumResponseDto albumInfo) { | ||||
|     Widget buildAlbumDateRange(AlbumResponseDto albumInfo) { | ||||
|       String startDate = ""; | ||||
|       DateTime parsedStartDate = | ||||
|           DateTime.parse(albumInfo.assets.first.createdAt); | ||||
| @@ -148,14 +149,14 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     Widget _buildHeader(AlbumResponseDto albumInfo) { | ||||
|     Widget buildHeader(AlbumResponseDto albumInfo) { | ||||
|       return SliverToBoxAdapter( | ||||
|         child: Column( | ||||
|           crossAxisAlignment: CrossAxisAlignment.start, | ||||
|           children: [ | ||||
|             _buildTitle(albumInfo), | ||||
|             buildTitle(albumInfo), | ||||
|             if (albumInfo.assets.isNotEmpty == true) | ||||
|               _buildAlbumDateRange(albumInfo), | ||||
|               buildAlbumDateRange(albumInfo), | ||||
|             if (albumInfo.shared) | ||||
|               SizedBox( | ||||
|                 height: 60, | ||||
| @@ -188,7 +189,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     Widget _buildImageGrid(AlbumResponseDto albumInfo) { | ||||
|     Widget buildImageGrid(AlbumResponseDto albumInfo) { | ||||
|       final appSettingService = ref.watch(appSettingsServiceProvider); | ||||
|       final bool showStorageIndicator = | ||||
|           appSettingService.getSetting(AppSettingsEnum.storageIndicator); | ||||
| @@ -220,7 +221,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|       return const SliverToBoxAdapter(); | ||||
|     } | ||||
|  | ||||
|     Widget _buildControlButton(AlbumResponseDto albumInfo) { | ||||
|     Widget buildControlButton(AlbumResponseDto albumInfo) { | ||||
|       return Padding( | ||||
|         padding: const EdgeInsets.only(left: 16.0, top: 8, bottom: 8), | ||||
|         child: SizedBox( | ||||
| @@ -230,13 +231,13 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|             children: [ | ||||
|               AlbumActionOutlinedButton( | ||||
|                 iconData: Icons.add_photo_alternate_outlined, | ||||
|                 onPressed: () => _onAddPhotosPressed(albumInfo), | ||||
|                 onPressed: () => onAddPhotosPressed(albumInfo), | ||||
|                 labelText: "share_add_photos".tr(), | ||||
|               ), | ||||
|               if (userId == albumInfo.ownerId) | ||||
|                 AlbumActionOutlinedButton( | ||||
|                   iconData: Icons.person_add_alt_rounded, | ||||
|                   onPressed: () => _onAddUsersPressed(albumInfo), | ||||
|                   onPressed: () => onAddUsersPressed(albumInfo), | ||||
|                   labelText: "album_viewer_page_share_add_users".tr(), | ||||
|                 ), | ||||
|             ], | ||||
| @@ -245,7 +246,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     Widget _buildBody(AlbumResponseDto albumInfo) { | ||||
|     Widget buildBody(AlbumResponseDto albumInfo) { | ||||
|       return GestureDetector( | ||||
|         onTap: () { | ||||
|           titleFocusNode.unfocus(); | ||||
| @@ -257,7 +258,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|           child: CustomScrollView( | ||||
|             controller: scrollController, | ||||
|             slivers: [ | ||||
|               _buildHeader(albumInfo), | ||||
|               buildHeader(albumInfo), | ||||
|               SliverPersistentHeader( | ||||
|                 pinned: true, | ||||
|                 delegate: ImmichSliverPersistentAppBarDelegate( | ||||
| @@ -265,11 +266,11 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|                   maxHeight: 50, | ||||
|                   child: Container( | ||||
|                     color: Theme.of(context).scaffoldBackgroundColor, | ||||
|                     child: _buildControlButton(albumInfo), | ||||
|                     child: buildControlButton(albumInfo), | ||||
|                   ), | ||||
|                 ), | ||||
|               ), | ||||
|               _buildImageGrid(albumInfo) | ||||
|               buildImageGrid(albumInfo) | ||||
|             ], | ||||
|           ), | ||||
|         ), | ||||
| @@ -293,7 +294,7 @@ class AlbumViewerPage extends HookConsumerWidget { | ||||
|       ), | ||||
|       body: albumInfo.when( | ||||
|         data: (albumInfo) => albumInfo != null | ||||
|             ? _buildBody(albumInfo) | ||||
|             ? buildBody(albumInfo) | ||||
|             : const Center( | ||||
|                 child: CircularProgressIndicator(), | ||||
|               ), | ||||
|   | ||||
| @@ -25,7 +25,7 @@ class AssetSelectionPage extends HookConsumerWidget { | ||||
|  | ||||
|     List<Widget> imageGridGroup = []; | ||||
|  | ||||
|     String _buildAssetCountText() { | ||||
|     String buildAssetCountText() { | ||||
|       if (isAlbumExist) { | ||||
|         return (selectedAssets.length + newAssetsForAlbum.length).toString(); | ||||
|       } else { | ||||
| @@ -33,7 +33,7 @@ class AssetSelectionPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     Widget _buildBody() { | ||||
|     Widget buildBody() { | ||||
|       assetGroupMonthYear.forEach((monthYear, assetGroup) { | ||||
|         imageGridGroup | ||||
|             .add(MonthGroupTitle(month: monthYear, assetGroup: assetGroup)); | ||||
| @@ -71,7 +71,7 @@ class AssetSelectionPage extends HookConsumerWidget { | ||||
|                 style: TextStyle(fontSize: 18), | ||||
|               ).tr() | ||||
|             : Text( | ||||
|                 _buildAssetCountText(), | ||||
|                 buildAssetCountText(), | ||||
|                 style: const TextStyle(fontSize: 18), | ||||
|               ), | ||||
|         centerTitle: false, | ||||
| @@ -94,7 +94,7 @@ class AssetSelectionPage extends HookConsumerWidget { | ||||
|             ), | ||||
|         ], | ||||
|       ), | ||||
|       body: _buildBody(), | ||||
|       body: buildBody(), | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -29,11 +29,11 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|         ref.watch(assetSelectionProvider).selectedNewAssetsForAlbum; | ||||
|     final isDarkTheme = Theme.of(context).brightness == Brightness.dark; | ||||
|  | ||||
|     _showSelectUserPage() { | ||||
|     showSelectUserPage() { | ||||
|       AutoRouter.of(context).push(const SelectUserForSharingRoute()); | ||||
|     } | ||||
|  | ||||
|     void _onBackgroundTapped() { | ||||
|     void onBackgroundTapped() { | ||||
|       albumTitleTextFieldFocusNode.unfocus(); | ||||
|       isAlbumTitleTextFieldFocus.value = false; | ||||
|  | ||||
| @@ -45,7 +45,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     _onSelectPhotosButtonPressed() async { | ||||
|     onSelectPhotosButtonPressed() async { | ||||
|       ref.watch(assetSelectionProvider.notifier).setIsAlbumExist(false); | ||||
|  | ||||
|       AssetSelectionPageResult? selectedAsset = await AutoRouter.of(context) | ||||
| @@ -56,7 +56,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     _buildTitleInputField() { | ||||
|     buildTitleInputField() { | ||||
|       return Padding( | ||||
|         padding: const EdgeInsets.only( | ||||
|           right: 10, | ||||
| @@ -71,7 +71,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildTitle() { | ||||
|     buildTitle() { | ||||
|       if (selectedAssets.isEmpty) { | ||||
|         return SliverToBoxAdapter( | ||||
|           child: Padding( | ||||
| @@ -90,7 +90,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|       return const SliverToBoxAdapter(); | ||||
|     } | ||||
|  | ||||
|     _buildSelectPhotosButton() { | ||||
|     buildSelectPhotosButton() { | ||||
|       if (selectedAssets.isEmpty) { | ||||
|         return SliverToBoxAdapter( | ||||
|           child: Padding( | ||||
| @@ -109,7 +109,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|                   borderRadius: BorderRadius.circular(5), | ||||
|                 ), | ||||
|               ), | ||||
|               onPressed: _onSelectPhotosButtonPressed, | ||||
|               onPressed: onSelectPhotosButtonPressed, | ||||
|               icon: Icon( | ||||
|                 Icons.add_rounded, | ||||
|                 color: Theme.of(context).primaryColor, | ||||
| @@ -132,7 +132,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|       return const SliverToBoxAdapter(); | ||||
|     } | ||||
|  | ||||
|     _buildControlButton() { | ||||
|     buildControlButton() { | ||||
|       return Padding( | ||||
|         padding: const EdgeInsets.only(left: 12.0, top: 16, bottom: 16), | ||||
|         child: SizedBox( | ||||
| @@ -142,7 +142,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|             children: [ | ||||
|               AlbumActionOutlinedButton( | ||||
|                 iconData: Icons.add_photo_alternate_outlined, | ||||
|                 onPressed: _onSelectPhotosButtonPressed, | ||||
|                 onPressed: onSelectPhotosButtonPressed, | ||||
|                 labelText: "share_add_photos".tr(), | ||||
|               ), | ||||
|             ], | ||||
| @@ -151,7 +151,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildSelectedImageGrid() { | ||||
|     buildSelectedImageGrid() { | ||||
|       if (selectedAssets.isNotEmpty) { | ||||
|         return SliverPadding( | ||||
|           padding: const EdgeInsets.only(top: 16), | ||||
| @@ -164,7 +164,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|             delegate: SliverChildBuilderDelegate( | ||||
|               (BuildContext context, int index) { | ||||
|                 return GestureDetector( | ||||
|                   onTap: _onBackgroundTapped, | ||||
|                   onTap: onBackgroundTapped, | ||||
|                   child: SharedAlbumThumbnailImage( | ||||
|                     asset: selectedAssets.elementAt(index), | ||||
|                   ), | ||||
| @@ -179,7 +179,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|       return const SliverToBoxAdapter(); | ||||
|     } | ||||
|  | ||||
|     _createNonSharedAlbum() async { | ||||
|     createNonSharedAlbum() async { | ||||
|       var newAlbum = await ref.watch(albumProvider.notifier).createAlbum( | ||||
|             ref.watch(albumTitleProvider), | ||||
|             ref.watch(assetSelectionProvider).selectedNewAssetsForAlbum, | ||||
| @@ -216,7 +216,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|           if (isSharedAlbum) | ||||
|             TextButton( | ||||
|               onPressed: albumTitleController.text.isNotEmpty | ||||
|                   ? _showSelectUserPage | ||||
|                   ? showSelectUserPage | ||||
|                   : null, | ||||
|               child: Text( | ||||
|                 'create_shared_album_page_share'.tr(), | ||||
| @@ -230,7 +230,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|             TextButton( | ||||
|               onPressed: albumTitleController.text.isNotEmpty && | ||||
|                       selectedAssets.isNotEmpty | ||||
|                   ? _createNonSharedAlbum | ||||
|                   ? createNonSharedAlbum | ||||
|                   : null, | ||||
|               child: Text( | ||||
|                 'create_shared_album_page_create'.tr(), | ||||
| @@ -242,7 +242,7 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|         ], | ||||
|       ), | ||||
|       body: GestureDetector( | ||||
|         onTap: _onBackgroundTapped, | ||||
|         onTap: onBackgroundTapped, | ||||
|         child: CustomScrollView( | ||||
|           slivers: [ | ||||
|             SliverAppBar( | ||||
| @@ -255,15 +255,15 @@ class CreateAlbumPage extends HookConsumerWidget { | ||||
|                 preferredSize: const Size.fromHeight(66.0), | ||||
|                 child: Column( | ||||
|                   children: [ | ||||
|                     _buildTitleInputField(), | ||||
|                     if (selectedAssets.isNotEmpty) _buildControlButton(), | ||||
|                     buildTitleInputField(), | ||||
|                     if (selectedAssets.isNotEmpty) buildControlButton(), | ||||
|                   ], | ||||
|                 ), | ||||
|               ), | ||||
|             ), | ||||
|             _buildTitle(), | ||||
|             _buildSelectPhotosButton(), | ||||
|             _buildSelectedImageGrid(), | ||||
|             buildTitle(), | ||||
|             buildSelectPhotosButton(), | ||||
|             buildSelectedImageGrid(), | ||||
|           ], | ||||
|         ), | ||||
|       ), | ||||
|   | ||||
| @@ -19,12 +19,12 @@ class SelectAdditionalUserForSharingPage extends HookConsumerWidget { | ||||
|         ref.watch(suggestedSharedUsersProvider); | ||||
|     final sharedUsersList = useState<Set<UserResponseDto>>({}); | ||||
|  | ||||
|     _addNewUsersHandler() { | ||||
|     addNewUsersHandler() { | ||||
|       AutoRouter.of(context) | ||||
|           .pop(sharedUsersList.value.map((e) => e.id).toList()); | ||||
|     } | ||||
|  | ||||
|     _buildTileIcon(UserResponseDto user) { | ||||
|     buildTileIcon(UserResponseDto user) { | ||||
|       if (sharedUsersList.value.contains(user)) { | ||||
|         return CircleAvatar( | ||||
|           backgroundColor: Theme.of(context).primaryColor, | ||||
| @@ -42,7 +42,7 @@ class SelectAdditionalUserForSharingPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     _buildUserList(List<UserResponseDto> users) { | ||||
|     buildUserList(List<UserResponseDto> users) { | ||||
|       List<Widget> usersChip = []; | ||||
|  | ||||
|       for (var user in sharedUsersList.value) { | ||||
| @@ -84,7 +84,7 @@ class SelectAdditionalUserForSharingPage extends HookConsumerWidget { | ||||
|             shrinkWrap: true, | ||||
|             itemBuilder: ((context, index) { | ||||
|               return ListTile( | ||||
|                 leading: _buildTileIcon(users[index]), | ||||
|                 leading: buildTileIcon(users[index]), | ||||
|                 title: Text( | ||||
|                   users[index].email, | ||||
|                   style: const TextStyle( | ||||
| @@ -131,7 +131,7 @@ class SelectAdditionalUserForSharingPage extends HookConsumerWidget { | ||||
|         actions: [ | ||||
|           TextButton( | ||||
|             onPressed: | ||||
|                 sharedUsersList.value.isEmpty ? null : _addNewUsersHandler, | ||||
|                 sharedUsersList.value.isEmpty ? null : addNewUsersHandler, | ||||
|             child: const Text( | ||||
|               "share_add", | ||||
|               style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold), | ||||
| @@ -147,7 +147,7 @@ class SelectAdditionalUserForSharingPage extends HookConsumerWidget { | ||||
|             ); | ||||
|           } | ||||
|  | ||||
|           return _buildUserList(users); | ||||
|           return buildUserList(users); | ||||
|         }, | ||||
|         error: (e, _) => Text("Error loading suggested users $e"), | ||||
|         loading: () => const Center( | ||||
|   | ||||
| @@ -20,7 +20,7 @@ class SelectUserForSharingPage extends HookConsumerWidget { | ||||
|     AsyncValue<List<UserResponseDto>> suggestedShareUsers = | ||||
|         ref.watch(suggestedSharedUsersProvider); | ||||
|  | ||||
|     _createSharedAlbum() async { | ||||
|     createSharedAlbum() async { | ||||
|       var newAlbum = | ||||
|           await ref.watch(sharedAlbumProvider.notifier).createSharedAlbum( | ||||
|                 ref.watch(albumTitleProvider), | ||||
| @@ -44,7 +44,7 @@ class SelectUserForSharingPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildTileIcon(UserResponseDto user) { | ||||
|     buildTileIcon(UserResponseDto user) { | ||||
|       if (sharedUsersList.value.contains(user)) { | ||||
|         return CircleAvatar( | ||||
|           backgroundColor: Theme.of(context).primaryColor, | ||||
| @@ -62,7 +62,7 @@ class SelectUserForSharingPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     _buildUserList(List<UserResponseDto> users) { | ||||
|     buildUserList(List<UserResponseDto> users) { | ||||
|       List<Widget> usersChip = []; | ||||
|  | ||||
|       for (var user in sharedUsersList.value) { | ||||
| @@ -104,7 +104,7 @@ class SelectUserForSharingPage extends HookConsumerWidget { | ||||
|             shrinkWrap: true, | ||||
|             itemBuilder: ((context, index) { | ||||
|               return ListTile( | ||||
|                 leading: _buildTileIcon(users[index]), | ||||
|                 leading: buildTileIcon(users[index]), | ||||
|                 title: Text( | ||||
|                   users[index].email, | ||||
|                   style: const TextStyle( | ||||
| @@ -153,8 +153,7 @@ class SelectUserForSharingPage extends HookConsumerWidget { | ||||
|             style: TextButton.styleFrom( | ||||
|               foregroundColor: Theme.of(context).primaryColor, | ||||
|             ), | ||||
|             onPressed: | ||||
|                 sharedUsersList.value.isEmpty ? null : _createSharedAlbum, | ||||
|             onPressed: sharedUsersList.value.isEmpty ? null : createSharedAlbum, | ||||
|             child: const Text( | ||||
|               "share_create_album", | ||||
|               style: TextStyle( | ||||
| @@ -168,7 +167,7 @@ class SelectUserForSharingPage extends HookConsumerWidget { | ||||
|       ), | ||||
|       body: suggestedShareUsers.when( | ||||
|         data: (users) { | ||||
|           return _buildUserList(users); | ||||
|           return buildUserList(users); | ||||
|         }, | ||||
|         error: (e, _) => Text("Error loading suggested users $e"), | ||||
|         loading: () => const Center( | ||||
|   | ||||
| @@ -28,7 +28,7 @@ class SharingPage extends HookConsumerWidget { | ||||
|       [], | ||||
|     ); | ||||
|  | ||||
|     _buildAlbumList() { | ||||
|     buildAlbumList() { | ||||
|       return SliverList( | ||||
|         delegate: SliverChildBuilderDelegate( | ||||
|           (BuildContext context, int index) { | ||||
| @@ -71,7 +71,7 @@ class SharingPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildEmptyListIndication() { | ||||
|     buildEmptyListIndication() { | ||||
|       return SliverToBoxAdapter( | ||||
|         child: Padding( | ||||
|           padding: const EdgeInsets.all(8.0), | ||||
| @@ -136,8 +136,8 @@ class SharingPage extends HookConsumerWidget { | ||||
|             ), | ||||
|           ), | ||||
|           sharedAlbums.isNotEmpty | ||||
|               ? _buildAlbumList() | ||||
|               : _buildEmptyListIndication() | ||||
|               ? buildAlbumList() | ||||
|               : buildEmptyListIndication() | ||||
|         ], | ||||
|       ), | ||||
|     ); | ||||
|   | ||||
| @@ -64,5 +64,7 @@ class ImageViewerStateNotifier extends StateNotifier<ImageViewerPageState> { | ||||
| final imageViewerStateProvider = | ||||
|     StateNotifierProvider<ImageViewerStateNotifier, ImageViewerPageState>( | ||||
|   ((ref) => ImageViewerStateNotifier( | ||||
|       ref.watch(imageViewerServiceProvider), ref.watch(shareServiceProvider))), | ||||
|         ref.watch(imageViewerServiceProvider), | ||||
|         ref.watch(shareServiceProvider), | ||||
|       )), | ||||
| ); | ||||
|   | ||||
| @@ -15,7 +15,7 @@ class ExifBottomSheet extends ConsumerWidget { | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context, WidgetRef ref) { | ||||
|     _buildMap() { | ||||
|     buildMap() { | ||||
|       return Padding( | ||||
|         padding: const EdgeInsets.symmetric(vertical: 16.0), | ||||
|         child: Container( | ||||
| @@ -66,7 +66,7 @@ class ExifBottomSheet extends ConsumerWidget { | ||||
|  | ||||
|     ExifResponseDto? exifInfo = assetDetail.remote?.exifInfo; | ||||
|  | ||||
|     _buildLocationText() { | ||||
|     buildLocationText() { | ||||
|       return Text( | ||||
|         "${exifInfo?.city}, ${exifInfo?.state}", | ||||
|         style: TextStyle( | ||||
| @@ -120,11 +120,11 @@ class ExifBottomSheet extends ConsumerWidget { | ||||
|                   ).tr(), | ||||
|                   if (assetDetail.latitude != null && | ||||
|                       assetDetail.longitude != null) | ||||
|                     _buildMap(), | ||||
|                     buildMap(), | ||||
|                   if (exifInfo != null && | ||||
|                       exifInfo.city != null && | ||||
|                       exifInfo.state != null) | ||||
|                     _buildLocationText(), | ||||
|                     buildLocationText(), | ||||
|                   Text( | ||||
|                     "${assetDetail.latitude?.toStringAsFixed(4)}, ${assetDetail.longitude?.toStringAsFixed(4)}", | ||||
|                     style: TextStyle(fontSize: 12, color: Colors.grey[400]), | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| // ignore_for_file: implementation_imports | ||||
|  | ||||
| import 'package:flutter/foundation.dart'; | ||||
| import 'package:easy_localization/src/asset_loader.dart'; | ||||
| import 'package:easy_localization/src/easy_localization_controller.dart'; | ||||
|   | ||||
| @@ -33,7 +33,7 @@ class AlbumInfoCard extends HookConsumerWidget { | ||||
|     ColorFilter unselectedFilter = | ||||
|         const ColorFilter.mode(Colors.black, BlendMode.color); | ||||
|  | ||||
|     _buildSelectedTextBox() { | ||||
|     buildSelectedTextBox() { | ||||
|       if (isSelected) { | ||||
|         return Chip( | ||||
|           visualDensity: VisualDensity.compact, | ||||
| @@ -67,7 +67,7 @@ class AlbumInfoCard extends HookConsumerWidget { | ||||
|       return const SizedBox(); | ||||
|     } | ||||
|  | ||||
|     _buildImageFilter() { | ||||
|     buildImageFilter() { | ||||
|       if (isSelected) { | ||||
|         return selectedFilter; | ||||
|       } else if (isExcluded) { | ||||
| @@ -163,7 +163,7 @@ class AlbumInfoCard extends HookConsumerWidget { | ||||
|                       topRight: Radius.circular(12), | ||||
|                     ), | ||||
|                     image: DecorationImage( | ||||
|                       colorFilter: _buildImageFilter(), | ||||
|                       colorFilter: buildImageFilter(), | ||||
|                       image: imageData != null | ||||
|                           ? MemoryImage(imageData!) | ||||
|                           : const AssetImage( | ||||
| @@ -177,7 +177,7 @@ class AlbumInfoCard extends HookConsumerWidget { | ||||
|                 Positioned( | ||||
|                   bottom: 10, | ||||
|                   left: 25, | ||||
|                   child: _buildSelectedTextBox(), | ||||
|                   child: buildSelectedTextBox(), | ||||
|                 ) | ||||
|               ], | ||||
|             ), | ||||
|   | ||||
| @@ -15,14 +15,16 @@ class AlbumPreviewPage extends HookConsumerWidget { | ||||
|   Widget build(BuildContext context, WidgetRef ref) { | ||||
|     final assets = useState<List<AssetEntity>>([]); | ||||
|  | ||||
|     _getAssetsInAlbum() async { | ||||
|     getAssetsInAlbum() async { | ||||
|       assets.value = await album.getAssetListRange( | ||||
|           start: 0, end: await album.assetCountAsync); | ||||
|         start: 0, | ||||
|         end: await album.assetCountAsync, | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     useEffect( | ||||
|       () { | ||||
|         _getAssetsInAlbum(); | ||||
|         getAssetsInAlbum(); | ||||
|         return null; | ||||
|       }, | ||||
|       [], | ||||
|   | ||||
| @@ -27,7 +27,7 @@ class BackupAlbumSelectionPage extends HookConsumerWidget { | ||||
|       [], | ||||
|     ); | ||||
|  | ||||
|     _buildAlbumSelectionList() { | ||||
|     buildAlbumSelectionList() { | ||||
|       if (availableAlbums.isEmpty) { | ||||
|         return const Center( | ||||
|           child: ImmichLoadingIndicator(), | ||||
| @@ -56,7 +56,7 @@ class BackupAlbumSelectionPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildSelectedAlbumNameChip() { | ||||
|     buildSelectedAlbumNameChip() { | ||||
|       return selectedBackupAlbums.map((album) { | ||||
|         void removeSelection() { | ||||
|           if (ref.watch(backupProvider).selectedBackupAlbums.length == 1) { | ||||
| @@ -104,7 +104,7 @@ class BackupAlbumSelectionPage extends HookConsumerWidget { | ||||
|       }).toSet(); | ||||
|     } | ||||
|  | ||||
|     _buildExcludedAlbumNameChip() { | ||||
|     buildExcludedAlbumNameChip() { | ||||
|       return excludedBackupAlbums.map((album) { | ||||
|         void removeSelection() { | ||||
|           ref | ||||
| @@ -177,8 +177,8 @@ class BackupAlbumSelectionPage extends HookConsumerWidget { | ||||
|             padding: const EdgeInsets.symmetric(horizontal: 16.0), | ||||
|             child: Wrap( | ||||
|               children: [ | ||||
|                 ..._buildSelectedAlbumNameChip(), | ||||
|                 ..._buildExcludedAlbumNameChip() | ||||
|                 ...buildSelectedAlbumNameChip(), | ||||
|                 ...buildExcludedAlbumNameChip() | ||||
|               ], | ||||
|             ), | ||||
|           ), | ||||
| @@ -286,7 +286,7 @@ class BackupAlbumSelectionPage extends HookConsumerWidget { | ||||
|  | ||||
|           Padding( | ||||
|             padding: const EdgeInsets.only(bottom: 16.0), | ||||
|             child: _buildAlbumSelectionList(), | ||||
|             child: buildAlbumSelectionList(), | ||||
|           ), | ||||
|         ], | ||||
|       ), | ||||
|   | ||||
| @@ -45,7 +45,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       [], | ||||
|     ); | ||||
|  | ||||
|     Widget _buildStorageInformation() { | ||||
|     Widget buildStorageInformation() { | ||||
|       return ListTile( | ||||
|         leading: Icon( | ||||
|           Icons.storage_rounded, | ||||
| @@ -84,7 +84,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     ListTile _buildAutoBackupController() { | ||||
|     ListTile buildAutoBackupController() { | ||||
|       var backUpOption = authenticationState.deviceInfo.isAutoBackup | ||||
|           ? "backup_controller_page_status_on".tr() | ||||
|           : "backup_controller_page_status_off".tr(); | ||||
| @@ -143,7 +143,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     void _showErrorToUser(String msg) { | ||||
|     void showErrorToUser(String msg) { | ||||
|       final snackBar = SnackBar( | ||||
|         content: Text( | ||||
|           msg.tr(), | ||||
| @@ -153,7 +153,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       ScaffoldMessenger.of(context).showSnackBar(snackBar); | ||||
|     } | ||||
|  | ||||
|     void _showBatteryOptimizationInfoToUser() { | ||||
|     void showBatteryOptimizationInfoToUser() { | ||||
|       showDialog<void>( | ||||
|         context: context, | ||||
|         barrierDismissible: false, | ||||
| @@ -193,7 +193,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     ListTile _buildBackgroundBackupController() { | ||||
|     ListTile buildBackgroundBackupController() { | ||||
|       final bool isBackgroundEnabled = backupState.backgroundBackup; | ||||
|       final bool isWifiRequired = backupState.backupRequireWifi; | ||||
|       final bool isChargingRequired = backupState.backupRequireCharging; | ||||
| @@ -238,8 +238,8 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|                         .read(backupProvider.notifier) | ||||
|                         .configureBackgroundBackup( | ||||
|                           requireWifi: isChecked, | ||||
|                           onError: _showErrorToUser, | ||||
|                           onBatteryInfo: _showBatteryOptimizationInfoToUser, | ||||
|                           onError: showErrorToUser, | ||||
|                           onBatteryInfo: showBatteryOptimizationInfoToUser, | ||||
|                         ) | ||||
|                     : null, | ||||
|               ), | ||||
| @@ -259,8 +259,8 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|                         .read(backupProvider.notifier) | ||||
|                         .configureBackgroundBackup( | ||||
|                           requireCharging: isChecked, | ||||
|                           onError: _showErrorToUser, | ||||
|                           onBatteryInfo: _showBatteryOptimizationInfoToUser, | ||||
|                           onError: showErrorToUser, | ||||
|                           onBatteryInfo: showBatteryOptimizationInfoToUser, | ||||
|                         ) | ||||
|                     : null, | ||||
|               ), | ||||
| @@ -268,8 +268,8 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|               onPressed: () => | ||||
|                   ref.read(backupProvider.notifier).configureBackgroundBackup( | ||||
|                         enabled: !isBackgroundEnabled, | ||||
|                         onError: _showErrorToUser, | ||||
|                         onBatteryInfo: _showBatteryOptimizationInfoToUser, | ||||
|                         onError: showErrorToUser, | ||||
|                         onBatteryInfo: showBatteryOptimizationInfoToUser, | ||||
|                       ), | ||||
|               child: Text( | ||||
|                 isBackgroundEnabled | ||||
| @@ -284,7 +284,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     Widget _buildSelectedAlbumName() { | ||||
|     Widget buildSelectedAlbumName() { | ||||
|       var text = "backup_controller_page_backup_selected".tr(); | ||||
|       var albums = ref.watch(backupProvider).selectedBackupAlbums; | ||||
|  | ||||
| @@ -323,7 +323,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     Widget _buildExcludedAlbumName() { | ||||
|     Widget buildExcludedAlbumName() { | ||||
|       var text = "backup_controller_page_excluded".tr(); | ||||
|       var albums = ref.watch(backupProvider).excludedBackupAlbums; | ||||
|  | ||||
| @@ -348,7 +348,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     _buildFolderSelectionTile() { | ||||
|     buildFolderSelectionTile() { | ||||
|       return Card( | ||||
|         shape: RoundedRectangleBorder( | ||||
|           borderRadius: BorderRadius.circular(5), // if you need this | ||||
| @@ -374,8 +374,8 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|                   "backup_controller_page_to_backup", | ||||
|                   style: TextStyle(fontSize: 12), | ||||
|                 ).tr(), | ||||
|                 _buildSelectedAlbumName(), | ||||
|                 _buildExcludedAlbumName() | ||||
|                 buildSelectedAlbumName(), | ||||
|                 buildExcludedAlbumName() | ||||
|               ], | ||||
|             ), | ||||
|           ), | ||||
| @@ -398,7 +398,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildCurrentBackupAssetInfoCard() { | ||||
|     buildCurrentBackupAssetInfoCard() { | ||||
|       return ListTile( | ||||
|         leading: Icon( | ||||
|           Icons.info_outline_rounded, | ||||
| @@ -606,7 +606,7 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|                       ), | ||||
|                     ), | ||||
|                   ), | ||||
|             _buildFolderSelectionTile(), | ||||
|             buildFolderSelectionTile(), | ||||
|             BackupInfoCard( | ||||
|               title: "backup_controller_page_total".tr(), | ||||
|               subtitle: "backup_controller_page_total_sub".tr(), | ||||
| @@ -624,13 +624,13 @@ class BackupControllerPage extends HookConsumerWidget { | ||||
|                   "${backupState.allUniqueAssets.length - backupState.selectedAlbumsBackupAssetsIds.length}", | ||||
|             ), | ||||
|             const Divider(), | ||||
|             _buildAutoBackupController(), | ||||
|             buildAutoBackupController(), | ||||
|             if (Platform.isAndroid) const Divider(), | ||||
|             if (Platform.isAndroid) _buildBackgroundBackupController(), | ||||
|             if (Platform.isAndroid) buildBackgroundBackupController(), | ||||
|             const Divider(), | ||||
|             _buildStorageInformation(), | ||||
|             buildStorageInformation(), | ||||
|             const Divider(), | ||||
|             _buildCurrentBackupAssetInfoCard(), | ||||
|             buildCurrentBackupAssetInfoCard(), | ||||
|             Padding( | ||||
|               padding: const EdgeInsets.only( | ||||
|                 top: 24, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ import 'package:immich_mobile/shared/models/asset.dart'; | ||||
| import 'package:immich_mobile/shared/providers/api.provider.dart'; | ||||
| import 'package:immich_mobile/shared/services/api.service.dart'; | ||||
| import 'package:openapi/api.dart'; | ||||
| import 'package:photo_manager/src/types/entity.dart'; | ||||
| import 'package:photo_manager/photo_manager.dart'; | ||||
|  | ||||
| final assetServiceProvider = Provider( | ||||
|   (ref) => AssetService( | ||||
|   | ||||
| @@ -15,7 +15,7 @@ class ProfileDrawer extends HookConsumerWidget { | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context, WidgetRef ref) { | ||||
|     _buildSignoutButton() { | ||||
|     buildSignoutButton() { | ||||
|       return ListTile( | ||||
|         horizontalTitleGap: 0, | ||||
|         leading: SizedBox( | ||||
| @@ -46,7 +46,7 @@ class ProfileDrawer extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildSettingButton() { | ||||
|     buildSettingButton() { | ||||
|       return ListTile( | ||||
|         horizontalTitleGap: 0, | ||||
|         leading: SizedBox( | ||||
| @@ -79,8 +79,8 @@ class ProfileDrawer extends HookConsumerWidget { | ||||
|             padding: EdgeInsets.zero, | ||||
|             children: [ | ||||
|               const ProfileDrawerHeader(), | ||||
|               _buildSettingButton(), | ||||
|               _buildSignoutButton(), | ||||
|               buildSettingButton(), | ||||
|               buildSignoutButton(), | ||||
|             ], | ||||
|           ), | ||||
|           const ServerInfoBox() | ||||
|   | ||||
| @@ -25,7 +25,7 @@ class ProfileDrawerHeader extends HookConsumerWidget { | ||||
|     var dummmy = Random().nextInt(1024); | ||||
|     final isDarkMode = Theme.of(context).brightness == Brightness.dark; | ||||
|  | ||||
|     _buildUserProfileImage() { | ||||
|     buildUserProfileImage() { | ||||
|       if (authState.profileImagePath.isEmpty) { | ||||
|         return const CircleAvatar( | ||||
|           radius: 35, | ||||
| @@ -77,7 +77,7 @@ class ProfileDrawerHeader extends HookConsumerWidget { | ||||
|       return const SizedBox(); | ||||
|     } | ||||
|  | ||||
|     _pickUserProfileImage() async { | ||||
|     pickUserProfileImage() async { | ||||
|       final XFile? image = await ImagePicker().pickImage( | ||||
|         source: ImageSource.gallery, | ||||
|         maxHeight: 1024, | ||||
| @@ -98,7 +98,7 @@ class ProfileDrawerHeader extends HookConsumerWidget { | ||||
|  | ||||
|     useEffect( | ||||
|       () { | ||||
|         _buildUserProfileImage(); | ||||
|         buildUserProfileImage(); | ||||
|         return null; | ||||
|       }, | ||||
|       [], | ||||
| @@ -129,12 +129,12 @@ class ProfileDrawerHeader extends HookConsumerWidget { | ||||
|           Stack( | ||||
|             clipBehavior: Clip.none, | ||||
|             children: [ | ||||
|               _buildUserProfileImage(), | ||||
|               buildUserProfileImage(), | ||||
|               Positioned( | ||||
|                 bottom: 0, | ||||
|                 right: -5, | ||||
|                 child: GestureDetector( | ||||
|                   onTap: _pickUserProfileImage, | ||||
|                   onTap: pickUserProfileImage, | ||||
|                   child: Material( | ||||
|                     color: Colors.grey[100], | ||||
|                     elevation: 3, | ||||
|   | ||||
| @@ -17,7 +17,7 @@ class ServerInfoBox extends HookConsumerWidget { | ||||
|  | ||||
|     final appInfo = useState({}); | ||||
|  | ||||
|     _getPackageInfo() async { | ||||
|     getPackageInfo() async { | ||||
|       PackageInfo packageInfo = await PackageInfo.fromPlatform(); | ||||
|  | ||||
|       appInfo.value = { | ||||
| @@ -28,7 +28,7 @@ class ServerInfoBox extends HookConsumerWidget { | ||||
|  | ||||
|     useEffect( | ||||
|       () { | ||||
|         _getPackageInfo(); | ||||
|         getPackageInfo(); | ||||
|         return null; | ||||
|       }, | ||||
|       [], | ||||
|   | ||||
| @@ -2,5 +2,5 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||
| import 'package:immich_mobile/modules/login/services/oauth.service.dart'; | ||||
| import 'package:immich_mobile/shared/providers/api.provider.dart'; | ||||
|  | ||||
| final OAuthServiceProvider = | ||||
| final oAuthServiceProvider = | ||||
|     Provider((ref) => OAuthService(ref.watch(apiServiceProvider))); | ||||
|   | ||||
| @@ -349,7 +349,7 @@ class OAuthLoginButton extends ConsumerWidget { | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context, WidgetRef ref) { | ||||
|     var oAuthService = ref.watch(OAuthServiceProvider); | ||||
|     var oAuthService = ref.watch(oAuthServiceProvider); | ||||
|  | ||||
|     void performOAuthLogin() async { | ||||
|       ref.watch(assetProvider.notifier).clearAllAsset(); | ||||
|   | ||||
| @@ -39,14 +39,14 @@ class SearchPage extends HookConsumerWidget { | ||||
|       [], | ||||
|     ); | ||||
|  | ||||
|     _onSearchSubmitted(String searchTerm) async { | ||||
|     onSearchSubmitted(String searchTerm) async { | ||||
|       searchFocusNode.unfocus(); | ||||
|       ref.watch(searchPageStateProvider.notifier).disableSearch(); | ||||
|  | ||||
|       AutoRouter.of(context).push(SearchResultRoute(searchTerm: searchTerm)); | ||||
|     } | ||||
|  | ||||
|     _buildPlaces() { | ||||
|     buildPlaces() { | ||||
|       return curatedLocation.when( | ||||
|         loading: () => SizedBox( | ||||
|           height: imageSize, | ||||
| @@ -97,7 +97,7 @@ class SearchPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildThings() { | ||||
|     buildThings() { | ||||
|       return curatedObjects.when( | ||||
|         loading: () => SizedBox( | ||||
|           height: imageSize, | ||||
| @@ -155,7 +155,7 @@ class SearchPage extends HookConsumerWidget { | ||||
|     return Scaffold( | ||||
|       appBar: SearchBar( | ||||
|         searchFocusNode: searchFocusNode, | ||||
|         onSubmitted: _onSearchSubmitted, | ||||
|         onSubmitted: onSearchSubmitted, | ||||
|       ), | ||||
|       body: GestureDetector( | ||||
|         onTap: () { | ||||
| @@ -174,7 +174,7 @@ class SearchPage extends HookConsumerWidget { | ||||
|                     style: TextStyle(fontWeight: FontWeight.bold, fontSize: 14), | ||||
|                   ).tr(), | ||||
|                 ), | ||||
|                 _buildPlaces(), | ||||
|                 buildPlaces(), | ||||
|                 Padding( | ||||
|                   padding: const EdgeInsets.all(16.0), | ||||
|                   child: const Text( | ||||
| @@ -182,11 +182,11 @@ class SearchPage extends HookConsumerWidget { | ||||
|                     style: TextStyle(fontWeight: FontWeight.bold, fontSize: 14), | ||||
|                   ).tr(), | ||||
|                 ), | ||||
|                 _buildThings() | ||||
|                 buildThings() | ||||
|               ], | ||||
|             ), | ||||
|             if (isSearchEnabled) | ||||
|               SearchSuggestionList(onSubmitted: _onSearchSubmitted), | ||||
|               SearchSuggestionList(onSubmitted: onSearchSubmitted), | ||||
|           ], | ||||
|         ), | ||||
|       ), | ||||
|   | ||||
| @@ -38,7 +38,7 @@ class SearchResultPage extends HookConsumerWidget { | ||||
|       [], | ||||
|     ); | ||||
|  | ||||
|     _onSearchSubmitted(String newSearchTerm) { | ||||
|     onSearchSubmitted(String newSearchTerm) { | ||||
|       debugPrint("Re-Search with $newSearchTerm"); | ||||
|       searchFocusNode?.unfocus(); | ||||
|       isNewSearch.value = false; | ||||
| @@ -46,7 +46,7 @@ class SearchResultPage extends HookConsumerWidget { | ||||
|       ref.watch(searchResultPageProvider.notifier).search(newSearchTerm); | ||||
|     } | ||||
|  | ||||
|     _buildTextField() { | ||||
|     buildTextField() { | ||||
|       return TextField( | ||||
|         controller: searchTermController, | ||||
|         focusNode: searchFocusNode, | ||||
| @@ -60,7 +60,7 @@ class SearchResultPage extends HookConsumerWidget { | ||||
|         onSubmitted: (searchTerm) { | ||||
|           if (searchTerm.isNotEmpty) { | ||||
|             searchTermController.clear(); | ||||
|             _onSearchSubmitted(searchTerm); | ||||
|             onSearchSubmitted(searchTerm); | ||||
|           } else { | ||||
|             isNewSearch.value = false; | ||||
|           } | ||||
| @@ -80,7 +80,7 @@ class SearchResultPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildChip() { | ||||
|     buildChip() { | ||||
|       return Chip( | ||||
|         label: Wrap( | ||||
|           spacing: 5, | ||||
| @@ -108,7 +108,7 @@ class SearchResultPage extends HookConsumerWidget { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     _buildSearchResult() { | ||||
|     buildSearchResult() { | ||||
|       var searchResultPageState = ref.watch(searchResultPageProvider); | ||||
|       var searchResultRenderList = ref.watch(searchRenderListProvider); | ||||
|  | ||||
| @@ -154,7 +154,7 @@ class SearchResultPage extends HookConsumerWidget { | ||||
|             isNewSearch.value = true; | ||||
|             searchFocusNode?.requestFocus(); | ||||
|           }, | ||||
|           child: isNewSearch.value ? _buildTextField() : _buildChip(), | ||||
|           child: isNewSearch.value ? buildTextField() : buildChip(), | ||||
|         ), | ||||
|         centerTitle: false, | ||||
|       ), | ||||
| @@ -168,9 +168,9 @@ class SearchResultPage extends HookConsumerWidget { | ||||
|         }, | ||||
|         child: Stack( | ||||
|           children: [ | ||||
|             _buildSearchResult(), | ||||
|             buildSearchResult(), | ||||
|             if (isNewSearch.value) | ||||
|               SearchSuggestionList(onSubmitted: _onSearchSubmitted), | ||||
|               SearchSuggestionList(onSubmitted: onSearchSubmitted), | ||||
|           ], | ||||
|         ), | ||||
|       ), | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import 'package:easy_localization/easy_localization.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||
| import 'package:immich_mobile/modules/settings/ui/asset_list_settings/asset_list_settings.dart'; | ||||
| import 'package:immich_mobile/modules/settings/ui/experimental_settings/experimental_settings.dart'; | ||||
| import 'package:immich_mobile/modules/settings/ui/image_viewer_quality_setting/image_viewer_quality_setting.dart'; | ||||
| import 'package:immich_mobile/modules/settings/ui/notification_setting/notification_setting.dart'; | ||||
| import 'package:immich_mobile/modules/settings/ui/theme_setting/theme_setting.dart'; | ||||
|   | ||||
| @@ -39,7 +39,8 @@ class AssetNotifier extends StateNotifier<List<Asset>> { | ||||
|         stopwatch.start(); | ||||
|         state = await _assetCacheService.get(); | ||||
|         debugPrint( | ||||
|             "Reading assets from cache: ${stopwatch.elapsedMilliseconds}ms"); | ||||
|           "Reading assets from cache: ${stopwatch.elapsedMilliseconds}ms", | ||||
|         ); | ||||
|         stopwatch.reset(); | ||||
|       } | ||||
|  | ||||
| @@ -145,7 +146,9 @@ class AssetNotifier extends StateNotifier<List<Asset>> { | ||||
|  | ||||
| final assetProvider = StateNotifierProvider<AssetNotifier, List<Asset>>((ref) { | ||||
|   return AssetNotifier( | ||||
|       ref.watch(assetServiceProvider), ref.watch(assetCacheServiceProvider)); | ||||
|     ref.watch(assetServiceProvider), | ||||
|     ref.watch(assetCacheServiceProvider), | ||||
|   ); | ||||
| }); | ||||
|  | ||||
| final assetGroupByDateTimeProvider = StateProvider((ref) { | ||||
|   | ||||
| @@ -17,10 +17,11 @@ class ReleaseInfoNotifier extends StateNotifier<String> { | ||||
|     try { | ||||
|       String? localReleaseVersion = box.get(githubReleaseInfoKey); | ||||
|       final res = await client.get( | ||||
|           Uri.parse( | ||||
|             "https://api.github.com/repos/immich-app/immich/releases/latest", | ||||
|           ), | ||||
|           headers: {"Accept": "application/vnd.github.v3+json"}); | ||||
|         Uri.parse( | ||||
|           "https://api.github.com/repos/immich-app/immich/releases/latest", | ||||
|         ), | ||||
|         headers: {"Accept": "application/vnd.github.v3+json"}, | ||||
|       ); | ||||
|  | ||||
|       if (res.statusCode == 200) { | ||||
|         final data = jsonDecode(res.body); | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| // ignore: depend_on_referenced_packages | ||||
| import 'package:flutter_cache_manager/flutter_cache_manager.dart'; | ||||
| import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||
| import 'package:immich_mobile/modules/settings/providers/app_settings.provider.dart'; | ||||
|   | ||||
| @@ -15,7 +15,7 @@ class ImmichToast { | ||||
|     final fToast = FToast(); | ||||
|     fToast.init(context); | ||||
|  | ||||
|     Color _getColor(ToastType type, BuildContext context) { | ||||
|     Color getColor(ToastType type, BuildContext context) { | ||||
|       switch (type) { | ||||
|         case ToastType.info: | ||||
|           return Theme.of(context).primaryColor; | ||||
| @@ -26,7 +26,7 @@ class ImmichToast { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     Icon _getIcon(ToastType type) { | ||||
|     Icon getIcon(ToastType type) { | ||||
|       switch (type) { | ||||
|         case ToastType.info: | ||||
|           return Icon( | ||||
| @@ -60,7 +60,7 @@ class ImmichToast { | ||||
|         child: Row( | ||||
|           mainAxisSize: MainAxisSize.min, | ||||
|           children: [ | ||||
|             _getIcon(toastType), | ||||
|             getIcon(toastType), | ||||
|             const SizedBox( | ||||
|               width: 12.0, | ||||
|             ), | ||||
| @@ -68,7 +68,7 @@ class ImmichToast { | ||||
|               child: Text( | ||||
|                 msg, | ||||
|                 style: TextStyle( | ||||
|                   color: _getColor(toastType, context), | ||||
|                   color: getColor(toastType, context), | ||||
|                   fontWeight: FontWeight.bold, | ||||
|                   fontSize: 15, | ||||
|                 ), | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| // ignore_for_file: depend_on_referenced_packages, implementation_imports | ||||
|  | ||||
| import 'dart:io'; | ||||
| import 'dart:math'; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user