Files
tatuchat/lib/pages/chat_list/chat_list_view.dart
Welton Moura 6c689d1f34
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
feat: tela de apps com logos/menu de exclusao, correcao de tema nas mini apps e sidebar de navegacao
2026-09-19 00:08:35 -03:00

114 lines
4.2 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';
import 'sidebar.dart';
class ChatListView extends StatelessWidget {
final ChatListController controller;
/// Whether the navigation sidebar (drawer) is available, e.g. hidden inside
/// the settings column.
final bool sideMenuEnabled;
const ChatListView(this.controller, {super.key, this.sideMenuEnabled = true});
@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,
onMenuPressed: sideMenuEnabled
? () => controller.scaffoldKey.currentState?.openDrawer()
: null,
),
Expanded(
child: Scaffold(
key: controller.scaffoldKey,
drawer: sideMenuEnabled
? Drawer(
width: FluffyThemes.sidebarWidth,
child: Sidebar(controller),
)
: null,
// Avoid accidentally opening the drawer when swiping at the
// edge of the chat column.
drawerEdgeDragWidth: isColumnMode || !sideMenuEnabled
? 0
: null,
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
? const StartChatFab()
: const SizedBox.shrink(),
bottomNavigationBar: isColumnMode
? null
: ChatBottomTabBar(
currentTab: homeTab,
onTabSelected: controller.setHomeTab,
),
),
),
],
),
),
);
}
}