You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			112 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Dart
		
	
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
import 'package:fluffychat/config/themes.dart';
 | 
						|
import 'package:fluffychat/l10n/l10n.dart';
 | 
						|
import 'package:fluffychat/pages/chat_search/chat_search_files_tab.dart';
 | 
						|
import 'package:fluffychat/pages/chat_search/chat_search_images_tab.dart';
 | 
						|
import 'package:fluffychat/pages/chat_search/chat_search_message_tab.dart';
 | 
						|
import 'package:fluffychat/pages/chat_search/chat_search_page.dart';
 | 
						|
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
 | 
						|
import 'package:fluffychat/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,
 | 
						|
                  ),
 | 
						|
                ],
 | 
						|
              ),
 | 
						|
            ),
 | 
						|
          ],
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |