chore: stack expanded space navigation menu over screen in one column mode (#5069)
This commit is contained in:
parent
0947811643
commit
471ec1b3a9
2 changed files with 38 additions and 19 deletions
|
|
@ -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((_) {
|
||||
|
|
|
|||
|
|
@ -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)),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue