mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 02:39:03 -04:00 
			
		
		
		
	* update dependencies * resolve dependency and update code for Flutter 3.10 * update github action flutter version * update test version * iOS deployment * pump intl package * list tile fix
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:easy_localization/easy_localization.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter_hooks/flutter_hooks.dart';
 | |
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:immich_mobile/modules/search/providers/search_page_state.provider.dart';
 | |
| 
 | |
| class ImmichSearchBar extends HookConsumerWidget
 | |
|     implements PreferredSizeWidget {
 | |
|   const ImmichSearchBar({
 | |
|     Key? key,
 | |
|     required this.searchFocusNode,
 | |
|     required this.onSubmitted,
 | |
|   }) : super(key: key);
 | |
| 
 | |
|   final FocusNode searchFocusNode;
 | |
|   final Function(String) onSubmitted;
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context, WidgetRef ref) {
 | |
|     final searchTermController = useTextEditingController(text: "");
 | |
|     final isSearchEnabled = ref.watch(searchPageStateProvider).isSearchEnabled;
 | |
| 
 | |
|     return AppBar(
 | |
|       automaticallyImplyLeading: false,
 | |
|       leading: isSearchEnabled
 | |
|           ? IconButton(
 | |
|               onPressed: () {
 | |
|                 searchFocusNode.unfocus();
 | |
|                 ref.watch(searchPageStateProvider.notifier).disableSearch();
 | |
|                 searchTermController.clear();
 | |
|               },
 | |
|               icon: const Icon(Icons.arrow_back_ios_rounded),
 | |
|             )
 | |
|           : const Icon(
 | |
|               Icons.search_rounded,
 | |
|               size: 20,
 | |
|             ),
 | |
|       title: TextField(
 | |
|         controller: searchTermController,
 | |
|         focusNode: searchFocusNode,
 | |
|         autofocus: false,
 | |
|         onTap: () {
 | |
|           searchTermController.clear();
 | |
|           ref.watch(searchPageStateProvider.notifier).getSuggestedSearchTerms();
 | |
|           ref.watch(searchPageStateProvider.notifier).enableSearch();
 | |
|           ref.watch(searchPageStateProvider.notifier).setSearchTerm("");
 | |
| 
 | |
|           searchFocusNode.requestFocus();
 | |
|         },
 | |
|         onSubmitted: (searchTerm) {
 | |
|           onSubmitted(searchTerm);
 | |
|           searchTermController.clear();
 | |
|           ref.watch(searchPageStateProvider.notifier).setSearchTerm("");
 | |
|         },
 | |
|         onChanged: (value) {
 | |
|           ref.watch(searchPageStateProvider.notifier).setSearchTerm(value);
 | |
|         },
 | |
|         decoration: InputDecoration(
 | |
|           hintText: 'search_bar_hint'.tr(),
 | |
|           hintStyle: Theme.of(context).textTheme.titleSmall?.copyWith(
 | |
|                 color: Theme.of(context).colorScheme.onSurface.withOpacity(0.5),
 | |
|                 fontWeight: FontWeight.w500,
 | |
|                 fontSize: 14,
 | |
|               ),
 | |
|           enabledBorder: const UnderlineInputBorder(
 | |
|             borderSide: BorderSide(color: Colors.transparent),
 | |
|           ),
 | |
|           focusedBorder: const UnderlineInputBorder(
 | |
|             borderSide: BorderSide(color: Colors.transparent),
 | |
|           ),
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Size get preferredSize => const Size.fromHeight(kToolbarHeight);
 | |
| }
 |