mirror of
https://github.com/immich-app/immich.git
synced 2025-09-29 15:31:13 -04:00
fix: expand sheet when album search is focused (#20651)
* fix: expand sheet when album search is focused * convert GeneralBottomSheet to ConsumerStatefulWidget * fix: cleaning up --------- Co-authored-by: Alex <alex.tran1502@gmail.com>
This commit is contained in:
parent
a91bb399f0
commit
081307ced2
@ -27,8 +27,9 @@ typedef AlbumSelectorCallback = void Function(RemoteAlbum album);
|
|||||||
|
|
||||||
class AlbumSelector extends ConsumerStatefulWidget {
|
class AlbumSelector extends ConsumerStatefulWidget {
|
||||||
final AlbumSelectorCallback onAlbumSelected;
|
final AlbumSelectorCallback onAlbumSelected;
|
||||||
|
final Function? onKeyboardExpanded;
|
||||||
|
|
||||||
const AlbumSelector({super.key, required this.onAlbumSelected});
|
const AlbumSelector({super.key, required this.onAlbumSelected, this.onKeyboardExpanded});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ConsumerState<AlbumSelector> createState() => _AlbumSelectorState();
|
ConsumerState<AlbumSelector> createState() => _AlbumSelectorState();
|
||||||
@ -52,6 +53,12 @@ class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
|||||||
searchController.addListener(() {
|
searchController.addListener(() {
|
||||||
onSearch(searchController.text, filterMode);
|
onSearch(searchController.text, filterMode);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
searchFocusNode.addListener(() {
|
||||||
|
if (searchFocusNode.hasFocus) {
|
||||||
|
widget.onKeyboardExpanded?.call();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void onSearch(String searchTerm, QuickFilterMode sortMode) {
|
void onSearch(String searchTerm, QuickFilterMode sortMode) {
|
||||||
|
@ -25,12 +25,30 @@ import 'package:immich_mobile/providers/server_info.provider.dart';
|
|||||||
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
|
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
|
||||||
import 'package:immich_mobile/widgets/common/immich_toast.dart';
|
import 'package:immich_mobile/widgets/common/immich_toast.dart';
|
||||||
|
|
||||||
class GeneralBottomSheet extends ConsumerWidget {
|
class GeneralBottomSheet extends ConsumerStatefulWidget {
|
||||||
final double? minChildSize;
|
final double? minChildSize;
|
||||||
const GeneralBottomSheet({super.key, this.minChildSize});
|
const GeneralBottomSheet({super.key, this.minChildSize});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
ConsumerState<GeneralBottomSheet> createState() => _GeneralBottomSheetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _GeneralBottomSheetState extends ConsumerState<GeneralBottomSheet> {
|
||||||
|
late DraggableScrollableController sheetController;
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
sheetController = DraggableScrollableController();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
sheetController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
final multiselect = ref.watch(multiSelectProvider);
|
final multiselect = ref.watch(multiSelectProvider);
|
||||||
final isTrashEnable = ref.watch(serverInfoProvider.select((state) => state.serverFeatures.trash));
|
final isTrashEnable = ref.watch(serverInfoProvider.select((state) => state.serverFeatures.trash));
|
||||||
|
|
||||||
@ -59,9 +77,14 @@ class GeneralBottomSheet extends ConsumerWidget {
|
|||||||
ref.read(multiSelectProvider.notifier).reset();
|
ref.read(multiSelectProvider.notifier).reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> onKeyboardExpand() {
|
||||||
|
return sheetController.animateTo(0.85, duration: const Duration(milliseconds: 200), curve: Curves.easeInOut);
|
||||||
|
}
|
||||||
|
|
||||||
return BaseBottomSheet(
|
return BaseBottomSheet(
|
||||||
|
controller: sheetController,
|
||||||
initialChildSize: 0.45,
|
initialChildSize: 0.45,
|
||||||
minChildSize: minChildSize,
|
minChildSize: widget.minChildSize,
|
||||||
maxChildSize: 0.85,
|
maxChildSize: 0.85,
|
||||||
shouldCloseOnMinExtent: false,
|
shouldCloseOnMinExtent: false,
|
||||||
actions: [
|
actions: [
|
||||||
@ -90,7 +113,7 @@ class GeneralBottomSheet extends ConsumerWidget {
|
|||||||
],
|
],
|
||||||
slivers: [
|
slivers: [
|
||||||
const AddToAlbumHeader(),
|
const AddToAlbumHeader(),
|
||||||
AlbumSelector(onAlbumSelected: addAssetsToAlbum),
|
AlbumSelector(onAlbumSelected: addAssetsToAlbum, onKeyboardExpanded: onKeyboardExpand),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user