fluffychat/lib/pages/chat_list/chat_list_view.dart
2025-12-07 16:48:37 +01:00

69 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.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) ||
AppSettings.displayNavigationRail.value) ...[
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(
onPressed: () => context.go('/rooms/newprivatechat'),
tooltip: L10n.of(context).newMessage,
foregroundColor: Theme.of(
context,
).colorScheme.onPrimary,
backgroundColor: Theme.of(context).colorScheme.primary,
child: const Icon(Icons.edit_square),
)
: const SizedBox.shrink(),
),
),
),
],
),
);
}
}