Skip to content

Commit 081307c

Browse files
bweesalextran1502
andauthored
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 <[email protected]>
1 parent a91bb39 commit 081307c

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

mobile/lib/presentation/widgets/album/album_selector.widget.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ typedef AlbumSelectorCallback = void Function(RemoteAlbum album);
2727

2828
class AlbumSelector extends ConsumerStatefulWidget {
2929
final AlbumSelectorCallback onAlbumSelected;
30+
final Function? onKeyboardExpanded;
3031

31-
const AlbumSelector({super.key, required this.onAlbumSelected});
32+
const AlbumSelector({super.key, required this.onAlbumSelected, this.onKeyboardExpanded});
3233

3334
@override
3435
ConsumerState<AlbumSelector> createState() => _AlbumSelectorState();
@@ -52,6 +53,12 @@ class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
5253
searchController.addListener(() {
5354
onSearch(searchController.text, filterMode);
5455
});
56+
57+
searchFocusNode.addListener(() {
58+
if (searchFocusNode.hasFocus) {
59+
widget.onKeyboardExpanded?.call();
60+
}
61+
});
5562
}
5663

5764
void onSearch(String searchTerm, QuickFilterMode sortMode) {

mobile/lib/presentation/widgets/bottom_sheet/general_bottom_sheet.widget.dart

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,30 @@ import 'package:immich_mobile/providers/server_info.provider.dart';
2525
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
2626
import 'package:immich_mobile/widgets/common/immich_toast.dart';
2727

28-
class GeneralBottomSheet extends ConsumerWidget {
28+
class GeneralBottomSheet extends ConsumerStatefulWidget {
2929
final double? minChildSize;
3030
const GeneralBottomSheet({super.key, this.minChildSize});
3131

3232
@override
33-
Widget build(BuildContext context, WidgetRef ref) {
33+
ConsumerState<GeneralBottomSheet> createState() => _GeneralBottomSheetState();
34+
}
35+
36+
class _GeneralBottomSheetState extends ConsumerState<GeneralBottomSheet> {
37+
late DraggableScrollableController sheetController;
38+
@override
39+
void initState() {
40+
super.initState();
41+
sheetController = DraggableScrollableController();
42+
}
43+
44+
@override
45+
void dispose() {
46+
sheetController.dispose();
47+
super.dispose();
48+
}
49+
50+
@override
51+
Widget build(BuildContext context) {
3452
final multiselect = ref.watch(multiSelectProvider);
3553
final isTrashEnable = ref.watch(serverInfoProvider.select((state) => state.serverFeatures.trash));
3654

@@ -59,9 +77,14 @@ class GeneralBottomSheet extends ConsumerWidget {
5977
ref.read(multiSelectProvider.notifier).reset();
6078
}
6179

80+
Future<void> onKeyboardExpand() {
81+
return sheetController.animateTo(0.85, duration: const Duration(milliseconds: 200), curve: Curves.easeInOut);
82+
}
83+
6284
return BaseBottomSheet(
85+
controller: sheetController,
6386
initialChildSize: 0.45,
64-
minChildSize: minChildSize,
87+
minChildSize: widget.minChildSize,
6588
maxChildSize: 0.85,
6689
shouldCloseOnMinExtent: false,
6790
actions: [
@@ -90,7 +113,7 @@ class GeneralBottomSheet extends ConsumerWidget {
90113
],
91114
slivers: [
92115
const AddToAlbumHeader(),
93-
AlbumSelector(onAlbumSelected: addAssetsToAlbum),
116+
AlbumSelector(onAlbumSelected: addAssetsToAlbum, onKeyboardExpanded: onKeyboardExpand),
94117
],
95118
);
96119
}

0 commit comments

Comments
 (0)