mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	Implemented bottom app bar with control buttons for asset's operation (#15)
This commit is contained in:
		| @@ -1,7 +1,10 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter_hooks/flutter_hooks.dart'; | ||||
| import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||
| import 'package:immich_mobile/modules/home/providers/home_page_state.provider.dart'; | ||||
| import 'package:immich_mobile/modules/home/ui/control_bottom_app_bar.dart'; | ||||
| import 'package:immich_mobile/modules/home/ui/daily_title_text.dart'; | ||||
| import 'package:immich_mobile/modules/home/ui/disable_multi_select_button.dart'; | ||||
| import 'package:immich_mobile/modules/home/ui/draggable_scrollbar.dart'; | ||||
| import 'package:immich_mobile/modules/home/ui/image_grid.dart'; | ||||
| import 'package:immich_mobile/modules/home/ui/immich_sliver_appbar.dart'; | ||||
| @@ -9,6 +12,7 @@ import 'package:immich_mobile/modules/home/ui/monthly_title_text.dart'; | ||||
| import 'package:immich_mobile/modules/home/ui/profile_drawer.dart'; | ||||
| import 'package:immich_mobile/modules/home/models/get_all_asset_respose.model.dart'; | ||||
| import 'package:immich_mobile/modules/home/providers/asset.provider.dart'; | ||||
| import 'package:sliver_tools/sliver_tools.dart'; | ||||
|  | ||||
| class HomePage extends HookConsumerWidget { | ||||
|   const HomePage({Key? key}) : super(key: key); | ||||
| @@ -18,6 +22,8 @@ class HomePage extends HookConsumerWidget { | ||||
|     ScrollController _scrollController = useScrollController(); | ||||
|     List<ImmichAssetGroupByDate> _assetGroup = ref.watch(assetProvider); | ||||
|     List<Widget> _imageGridGroup = []; | ||||
|     var isMultiSelectEnable = ref.watch(homePageStateProvider).isMultiSelectEnable; | ||||
|     var homePageState = ref.watch(homePageStateProvider); | ||||
|  | ||||
|     _scrollControllerCallback() { | ||||
|       var endOfPage = _scrollController.position.maxScrollExtent; | ||||
| @@ -28,10 +34,9 @@ class HomePage extends HookConsumerWidget { | ||||
|     } | ||||
|  | ||||
|     useEffect(() { | ||||
|       ref.read(assetProvider.notifier).getImmichAssets(); | ||||
|       ref.read(assetProvider.notifier).getAllAssets(); | ||||
|  | ||||
|       _scrollController.addListener(_scrollControllerCallback); | ||||
|  | ||||
|       return () { | ||||
|         _scrollController.removeListener(_scrollControllerCallback); | ||||
|       }; | ||||
| @@ -45,7 +50,7 @@ class HomePage extends HookConsumerWidget { | ||||
|       if (_imageGridGroup.isNotEmpty && _imageGridGroup.length < 20) { | ||||
|         ref.read(assetProvider.notifier).getOlderAsset(); | ||||
|       } else if (_imageGridGroup.isEmpty) { | ||||
|         ref.read(assetProvider.notifier).getImmichAssets(); | ||||
|         ref.read(assetProvider.notifier).getAllAssets(); | ||||
|       } | ||||
|     } | ||||
|  | ||||
| @@ -72,7 +77,10 @@ class HomePage extends HookConsumerWidget { | ||||
|  | ||||
|           // Add Daily Title Group | ||||
|           _imageGridGroup.add( | ||||
|             DailyTitleText(isoDate: dateTitle, assetGroup: assetGroup), | ||||
|             DailyTitleText( | ||||
|               isoDate: dateTitle, | ||||
|               assetGroup: assetGroup, | ||||
|             ), | ||||
|           ); | ||||
|  | ||||
|           // Add Image Group | ||||
| @@ -85,25 +93,49 @@ class HomePage extends HookConsumerWidget { | ||||
|       } | ||||
|  | ||||
|       return SafeArea( | ||||
|         child: DraggableScrollbar.semicircle( | ||||
|           backgroundColor: Theme.of(context).primaryColor, | ||||
|           controller: _scrollController, | ||||
|           heightScrollThumb: 48.0, | ||||
|           child: CustomScrollView( | ||||
|             controller: _scrollController, | ||||
|             slivers: [ | ||||
|               ImmichSliverAppBar( | ||||
|                 imageGridGroup: _imageGridGroup, | ||||
|                 onPopBack: onPopBackFromBackupPage, | ||||
|         bottom: !isMultiSelectEnable, | ||||
|         top: !isMultiSelectEnable, | ||||
|         child: Stack( | ||||
|           children: [ | ||||
|             DraggableScrollbar.semicircle( | ||||
|               backgroundColor: Theme.of(context).primaryColor, | ||||
|               controller: _scrollController, | ||||
|               heightScrollThumb: 48.0, | ||||
|               child: CustomScrollView( | ||||
|                 controller: _scrollController, | ||||
|                 slivers: [ | ||||
|                   SliverAnimatedSwitcher( | ||||
|                     child: isMultiSelectEnable | ||||
|                         ? const SliverToBoxAdapter( | ||||
|                             child: SizedBox( | ||||
|                               height: 70, | ||||
|                               child: null, | ||||
|                             ), | ||||
|                           ) | ||||
|                         : ImmichSliverAppBar( | ||||
|                             imageGridGroup: _imageGridGroup, | ||||
|                             onPopBack: onPopBackFromBackupPage, | ||||
|                           ), | ||||
|                     duration: const Duration(milliseconds: 350), | ||||
|                   ), | ||||
|                   ..._imageGridGroup | ||||
|                 ], | ||||
|               ), | ||||
|               ..._imageGridGroup, | ||||
|             ], | ||||
|           ), | ||||
|             ), | ||||
|             isMultiSelectEnable | ||||
|                 ? DisableMultiSelectButton( | ||||
|                     onPressed: ref.watch(homePageStateProvider.notifier).disableMultiSelect, | ||||
|                     selectedItemCount: homePageState.selectedItems.length, | ||||
|                   ) | ||||
|                 : Container(), | ||||
|             isMultiSelectEnable ? const ControlBottomAppBar() : Container(), | ||||
|           ], | ||||
|         ), | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     return Scaffold( | ||||
|       // key: _scaffoldKey, | ||||
|       drawer: const ProfileDrawer(), | ||||
|       body: _buildBody(), | ||||
|     ); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user