// SPDX-FileCopyrightText: 2019-Present Christian Kußowski // SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat // // SPDX-License-Identifier: AGPL-3.0-or-later import 'package:material_ui/material_ui.dart'; import 'package:tatchat/config/themes.dart'; import 'package:tatchat/pages/chat_list/chat_list.dart'; import 'package:tatchat/pages/chat_list/start_chat_fab.dart'; import 'package:tatchat/pages/chat_list/tabs/channels_tab.dart'; import 'package:tatchat/pages/chat_list/tabs/chat_tab_bar.dart'; import 'package:tatchat/pages/chat_list/tabs/chat_tab_header.dart'; import 'package:tatchat/pages/chat_list/tabs/home_tab.dart'; import 'package:tatchat/pages/chat_list/tabs/murals_tab.dart'; import 'package:tatchat/pages/chat_list/tabs/spaces_tab.dart'; import 'chat_list_body.dart'; class ChatListView extends StatelessWidget { final ChatListController controller; const ChatListView(this.controller, {super.key}); @override Widget build(BuildContext context) { final isColumnMode = FluffyThemes.isColumnMode(context); final homeTab = controller.homeTab; return PopScope( canPop: !controller.isSearchMode, onPopInvokedWithResult: (pop, _) { if (pop) return; if (controller.isSearchMode) { controller.cancelSearch(); return; } }, child: SafeArea( bottom: false, left: false, right: false, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ if (isColumnMode) ChatTopTabBar( currentTab: homeTab, onTabSelected: controller.setHomeTab, ), Expanded( child: Scaffold( body: SafeArea( top: false, bottom: false, left: false, right: false, child: IndexedStack( index: homeTab.index, children: [ ChatTabScaffold( tab: HomeTab.chats, isSearchMode: controller.isSearchMode, onSearchPressed: controller.startSearch, onSearchCancelled: () => controller.cancelSearch(), searchController: controller.searchController, searchFocusNode: controller.searchFocusNode, onSearchChanged: (text) => controller.onSearchEnter(text, globalSearch: true), controller: controller, child: ChatListViewBody(controller), ), ChannelsTab(controller), SpacesTab(controller), MuralsTab(controller), ], ), ), floatingActionButton: !controller.isSearchMode && !isColumnMode ? const StartChatFab() : const SizedBox.shrink(), bottomNavigationBar: isColumnMode ? null : ChatBottomTabBar( currentTab: homeTab, onTabSelected: controller.setHomeTab, ), ), ), ], ), ), ); } }