94 lines
3.3 KiB
Dart
94 lines
3.3 KiB
Dart
// 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,
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|