chore: stack expanded space navigation menu over screen in one column mode (#5069)

This commit is contained in:
ggurdin 2026-01-05 15:58:08 -05:00 committed by GitHub
parent 0947811643
commit 471ec1b3a9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 38 additions and 19 deletions

View file

@ -19,8 +19,10 @@ import 'package:fluffychat/widgets/navigation_rail.dart';
class SpaceNavigationColumn extends StatefulWidget {
final GoRouterState state;
final bool showNavRail;
const SpaceNavigationColumn({
required this.state,
required this.showNavRail,
super.key,
});
@ -67,29 +69,16 @@ class SpaceNavigationColumnState extends State<SpaceNavigationColumn> {
Widget build(BuildContext context) {
final theme = Theme.of(context);
final isColumnMode = FluffyThemes.isColumnMode(context);
bool showNavRail = isColumnMode;
if (!showNavRail) {
final roomID = widget.state.pathParameters['roomid'];
final spaceID = widget.state.pathParameters['spaceid'];
if (roomID == null && spaceID == null) {
showNavRail = !["newcourse", ":construct"].any(
(p) => widget.state.fullPath?.contains(p) ?? false,
);
} else if (roomID == null) {
showNavRail = widget.state.fullPath?.endsWith(':spaceid') == true;
}
}
final navRailWidth = isColumnMode
? FluffyThemes.navRailWidth
: FluffyThemes.navRailWidth - 8.0;
final double navRailExtraWidth = showNavRail ? 250.0 : 0.0;
final double navRailExtraWidth = widget.showNavRail ? 250.0 : 0.0;
final double columnWidth =
isColumnMode ? FluffyThemes.columnWidth + 1.0 : 0;
final double railWidth = showNavRail ? navRailWidth + 1.0 : 0;
final double railWidth = widget.showNavRail ? navRailWidth + 1.0 : 0;
final double baseWidth = columnWidth + railWidth;
final double expandedWidth = baseWidth < navRailExtraWidth
? navRailExtraWidth + railWidth
@ -122,7 +111,7 @@ class SpaceNavigationColumnState extends State<SpaceNavigationColumn> {
),
),
),
if (showNavRail)
if (widget.showNavRail)
HoverBuilder(
builder: (context, hovered) {
WidgetsBinding.instance.addPostFrameCallback((_) {

View file

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pangea/spaces/space_navigation_column.dart';
class TwoColumnLayout extends StatelessWidget {
@ -23,13 +24,42 @@ class TwoColumnLayout extends StatelessWidget {
Widget build(BuildContext context) {
// #Pangea
// final theme = Theme.of(context);
final isColumnMode = FluffyThemes.isColumnMode(context);
bool showNavRail = isColumnMode;
if (!showNavRail) {
final roomID = state.pathParameters['roomid'];
final spaceID = state.pathParameters['spaceid'];
if (roomID == null && spaceID == null) {
showNavRail = !["newcourse", ":construct"].any(
(p) => state.fullPath?.contains(p) ?? false,
);
} else if (roomID == null) {
showNavRail = state.fullPath?.endsWith(':spaceid') == true;
}
}
final columnWidth =
(showNavRail ? (FluffyThemes.navRailWidth + 1.0) : 0.0) +
(isColumnMode ? (FluffyThemes.columnWidth + 1.0) : 0.0);
// Pangea#
return ScaffoldMessenger(
child: Scaffold(
body: Row(
// #Pangea
// body: Row(
body: Stack(
fit: StackFit.expand,
// Pangea#
children: [
// #Pangea
SpaceNavigationColumn(state: state),
Positioned.fill(
left: columnWidth,
child: ClipRRect(child: sideView),
),
SpaceNavigationColumn(
state: state,
showNavRail: showNavRail,
),
// Container(
// clipBehavior: Clip.antiAlias,
// decoration: const BoxDecoration(),
@ -37,8 +67,8 @@ class TwoColumnLayout extends StatelessWidget {
// child: mainView,
// ),
// Container(width: 1.0, color: theme.dividerColor),
// Expanded(child: ClipRRect(child: sideView)),
// Pangea#
Expanded(child: ClipRRect(child: sideView)),
],
),
),