import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_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(), ), ), ), ], ), ); } }