From 4b926935bd9b4054cdfafb33bd577a0e6e12acd1 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 19 May 2025 16:13:42 -0400 Subject: [PATCH] feat: add setting for whether to show space navigation rail on mobile --- assets/l10n/intl_en.arb | 3 ++- lib/config/app_config.dart | 1 + lib/config/setting_keys.dart | 2 ++ lib/pages/chat_list/chat_list_body.dart | 3 ++- lib/pages/chat_list/chat_list_view.dart | 5 +++-- lib/pages/settings/settings_view.dart | 3 ++- lib/pages/settings_style/settings_style_view.dart | 6 ++++++ lib/widgets/matrix.dart | 4 ++++ 8 files changed, 22 insertions(+), 5 deletions(-) diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 40a1c3f7e..fa8c46c91 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -3236,5 +3236,6 @@ "enterNewChat": "Enter new chat", "approve": "Approve", "youHaveKnocked": "You have knocked", - "pleaseWaitUntilInvited": "Please wait now, until someone from the room invites you." + "pleaseWaitUntilInvited": "Please wait now, until someone from the room invites you.", + "displayNavigationRail": "Show navigation rail on mobile" } diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index 472e633b2..b5e10985d 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -59,6 +59,7 @@ abstract class AppConfig { static bool swipeRightToLeftToReply = true; static bool? sendOnEnter; static bool showPresences = true; + static bool displayNavigationRail = false; static bool experimentalVoip = false; static const bool hideTypingUsernames = false; static const bool hideAllStateEvents = false; diff --git a/lib/config/setting_keys.dart b/lib/config/setting_keys.dart index 14d259470..f4a9b55e3 100644 --- a/lib/config/setting_keys.dart +++ b/lib/config/setting_keys.dart @@ -32,6 +32,8 @@ abstract class SettingKeys { 'chat.fluffy.swipeRightToLeftToReply'; static const String experimentalVoip = 'chat.fluffy.experimental_voip'; static const String showPresences = 'chat.fluffy.show_presences'; + static const String displayNavigationRail = + 'chat.fluffy.display_navigation_rail'; } enum AppSettings { diff --git a/lib/pages/chat_list/chat_list_body.dart b/lib/pages/chat_list/chat_list_body.dart index 7699b7ed0..0aa8ee6ae 100644 --- a/lib/pages/chat_list/chat_list_body.dart +++ b/lib/pages/chat_list/chat_list_body.dart @@ -165,7 +165,8 @@ class ChatListViewBody extends StatelessWidget { ActiveFilter.groups, ActiveFilter.unread, if (spaceDelegateCandidates.isNotEmpty && - !controller.widget.displayNavigationRail) + !AppConfig.displayNavigationRail && + !FluffyThemes.isColumnMode(context)) ActiveFilter.spaces, ] .map( diff --git a/lib/pages/chat_list/chat_list_view.dart b/lib/pages/chat_list/chat_list_view.dart index 31f39b835..5c873117c 100644 --- a/lib/pages/chat_list/chat_list_view.dart +++ b/lib/pages/chat_list/chat_list_view.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/widgets/navigation_rail.dart'; @@ -30,8 +31,8 @@ class ChatListView extends StatelessWidget { }, child: Row( children: [ - if (FluffyThemes.isColumnMode(context) && - controller.widget.displayNavigationRail) ...[ + if (FluffyThemes.isColumnMode(context) || + AppConfig.displayNavigationRail) ...[ SpacesNavigationRail( activeSpaceId: controller.activeSpaceId, onGoToChats: controller.clearActiveSpace, diff --git a/lib/pages/settings/settings_view.dart b/lib/pages/settings/settings_view.dart index eddbc76e8..c1fb95a02 100644 --- a/lib/pages/settings/settings_view.dart +++ b/lib/pages/settings/settings_view.dart @@ -34,7 +34,8 @@ class SettingsView extends StatelessWidget { ?.tryGet('account'); return Row( children: [ - if (FluffyThemes.isColumnMode(context)) ...[ + if (FluffyThemes.isColumnMode(context) || + AppConfig.displayNavigationRail) ...[ SpacesNavigationRail( activeSpaceId: null, onGoToChats: () => context.go('/rooms'), diff --git a/lib/pages/settings_style/settings_style_view.dart b/lib/pages/settings_style/settings_style_view.dart index d234759df..5729074ef 100644 --- a/lib/pages/settings_style/settings_style_view.dart +++ b/lib/pages/settings_style/settings_style_view.dart @@ -359,6 +359,12 @@ class SettingsStyleView extends StatelessWidget { storeKey: SettingKeys.separateChatTypes, defaultValue: AppConfig.separateChatTypes, ), + SettingsSwitchListTile.adaptive( + title: L10n.of(context).displayNavigationRail, + onChanged: (b) => AppConfig.displayNavigationRail = b, + storeKey: SettingKeys.displayNavigationRail, + defaultValue: AppConfig.displayNavigationRail, + ), ], ), ), diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 4b8f42979..712497f0e 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -436,6 +436,10 @@ class MatrixState extends State with WidgetsBindingObserver { AppConfig.showPresences = store.getBool(SettingKeys.showPresences) ?? AppConfig.showPresences; + + AppConfig.displayNavigationRail = + store.getBool(SettingKeys.displayNavigationRail) ?? + AppConfig.displayNavigationRail; } @override