113 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:extera_next/generated/l10n/l10n.dart';
 | |
| 
 | |
| import 'package:extera_next/config/themes.dart';
 | |
| import 'package:extera_next/pages/chat_search/chat_search_files_tab.dart';
 | |
| import 'package:extera_next/pages/chat_search/chat_search_images_tab.dart';
 | |
| import 'package:extera_next/pages/chat_search/chat_search_message_tab.dart';
 | |
| import 'package:extera_next/pages/chat_search/chat_search_page.dart';
 | |
| import 'package:extera_next/utils/matrix_sdk_extensions/matrix_locals.dart';
 | |
| import 'package:extera_next/widgets/layouts/max_width_body.dart';
 | |
| 
 | |
| class ChatSearchView extends StatelessWidget {
 | |
|   final ChatSearchController controller;
 | |
| 
 | |
|   const ChatSearchView(this.controller, {super.key});
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     final room = controller.room;
 | |
|     if (room == null) {
 | |
|       return Scaffold(
 | |
|         appBar: AppBar(title: Text(L10n.of(context).oopsSomethingWentWrong)),
 | |
|         body: Center(
 | |
|           child: Padding(
 | |
|             padding: const EdgeInsets.all(16),
 | |
|             child: Text(L10n.of(context).youAreNoLongerParticipatingInThisChat),
 | |
|           ),
 | |
|         ),
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     final theme = Theme.of(context);
 | |
| 
 | |
|     return Scaffold(
 | |
|       appBar: AppBar(
 | |
|         leading: const Center(child: BackButton()),
 | |
|         titleSpacing: 0,
 | |
|         title: Text(
 | |
|           L10n.of(context).searchIn(
 | |
|             room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))),
 | |
|           ),
 | |
|         ),
 | |
|       ),
 | |
|       body: MaxWidthBody(
 | |
|         withScrolling: false,
 | |
|         child: Column(
 | |
|           children: [
 | |
|             if (FluffyThemes.isThreeColumnMode(context))
 | |
|               const SizedBox(height: 16),
 | |
|             Padding(
 | |
|               padding: const EdgeInsets.symmetric(
 | |
|                 horizontal: 16,
 | |
|               ),
 | |
|               child: TextField(
 | |
|                 controller: controller.searchController,
 | |
|                 onSubmitted: (_) => controller.restartSearch(),
 | |
|                 autofocus: true,
 | |
|                 enabled: controller.tabController.index == 0,
 | |
|                 decoration: InputDecoration(
 | |
|                   hintText: L10n.of(context).search,
 | |
|                   prefixIcon: const Icon(Icons.search_outlined),
 | |
|                   filled: true,
 | |
|                   fillColor: theme.colorScheme.secondaryContainer,
 | |
|                   border: OutlineInputBorder(
 | |
|                     borderSide: BorderSide.none,
 | |
|                     borderRadius: BorderRadius.circular(99),
 | |
|                   ),
 | |
|                   hintStyle: TextStyle(
 | |
|                     color: theme.colorScheme.onPrimaryContainer,
 | |
|                     fontWeight: FontWeight.normal,
 | |
|                   ),
 | |
|                 ),
 | |
|               ),
 | |
|             ),
 | |
|             TabBar(
 | |
|               controller: controller.tabController,
 | |
|               tabs: [
 | |
|                 Tab(child: Text(L10n.of(context).messages)),
 | |
|                 Tab(child: Text(L10n.of(context).gallery)),
 | |
|                 Tab(child: Text(L10n.of(context).files)),
 | |
|               ],
 | |
|             ),
 | |
|             Expanded(
 | |
|               child: TabBarView(
 | |
|                 controller: controller.tabController,
 | |
|                 children: [
 | |
|                   ChatSearchMessageTab(
 | |
|                     searchQuery: controller.searchController.text,
 | |
|                     room: room,
 | |
|                     startSearch: controller.startMessageSearch,
 | |
|                     searchStream: controller.searchStream,
 | |
|                   ),
 | |
|                   ChatSearchImagesTab(
 | |
|                     room: room,
 | |
|                     startSearch: controller.startGallerySearch,
 | |
|                     searchStream: controller.galleryStream,
 | |
|                   ),
 | |
|                   ChatSearchFilesTab(
 | |
|                     room: room,
 | |
|                     startSearch: controller.startFileSearch,
 | |
|                     searchStream: controller.fileStream,
 | |
|                   ),
 | |
|                 ],
 | |
|               ),
 | |
|             ),
 | |
|           ],
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |