71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:fluffychat/generated/l10n/l10n.dart';
 | |
| import 'package:go_router/go_router.dart';
 | |
| 
 | |
| import 'package:fluffychat/config/themes.dart';
 | |
| import 'package:fluffychat/pages/chat_list/chat_list.dart';
 | |
| import 'package:fluffychat/widgets/navigation_rail.dart';
 | |
| import 'chat_list_body.dart';
 | |
| 
 | |
| class ChatListView extends StatelessWidget {
 | |
|   final ChatListController controller;
 | |
| 
 | |
|   const ChatListView(this.controller, {super.key});
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return PopScope(
 | |
|       canPop: !controller.isSearchMode && controller.activeSpaceId == null,
 | |
|       onPopInvokedWithResult: (pop, _) {
 | |
|         if (pop) return;
 | |
|         if (controller.activeSpaceId != null) {
 | |
|           controller.clearActiveSpace();
 | |
|           return;
 | |
|         }
 | |
|         if (controller.isSearchMode) {
 | |
|           controller.cancelSearch();
 | |
|           return;
 | |
|         }
 | |
|       },
 | |
|       child: Row(
 | |
|         children: [
 | |
|           if (FluffyThemes.isColumnMode(context) &&
 | |
|               controller.widget.displayNavigationRail) ...[
 | |
|             SpacesNavigationRail(
 | |
|               activeSpaceId: controller.activeSpaceId,
 | |
|               onGoToChats: controller.clearActiveSpace,
 | |
|               onGoToSpaceId: controller.setActiveSpace,
 | |
|             ),
 | |
|             Container(
 | |
|               color: Theme.of(context).dividerColor,
 | |
|               width: 1,
 | |
|             ),
 | |
|           ],
 | |
|           Expanded(
 | |
|             child: GestureDetector(
 | |
|               onTap: FocusManager.instance.primaryFocus?.unfocus,
 | |
|               excludeFromSemantics: true,
 | |
|               behavior: HitTestBehavior.translucent,
 | |
|               child: Scaffold(
 | |
|                 body: ChatListViewBody(controller),
 | |
|                 floatingActionButton: !controller.isSearchMode &&
 | |
|                         controller.activeSpaceId == null
 | |
|                     ? FloatingActionButton.extended(
 | |
|                         onPressed: () => context.go('/rooms/newprivatechat'),
 | |
|                         icon: const Icon(Icons.add_outlined),
 | |
|                         label: Text(
 | |
|                           L10n.of(context).chat,
 | |
|                           overflow: TextOverflow.fade,
 | |
|                         ),
 | |
|                       )
 | |
|                     : const SizedBox.shrink(),
 | |
|               ),
 | |
|             ),
 | |
|           ),
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |