|
@@ -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(),
|
|
|
);
|