From de6ca5cd8c4aa418847f66f7b027b46718a00d11 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Sun, 8 Oct 2023 11:02:49 +0530 Subject: [PATCH] Collection pane scrollbar visibility added to settings --- lib/models/settings_model.dart | 9 +++++++++ lib/providers/settings_providers.dart | 2 ++ lib/screens/home_page/collection_pane.dart | 4 +++- lib/screens/settings_page.dart | 13 +++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/models/settings_model.dart b/lib/models/settings_model.dart index 10509287..e705c8b5 100644 --- a/lib/models/settings_model.dart +++ b/lib/models/settings_model.dart @@ -5,12 +5,14 @@ import 'package:apidash/consts.dart'; class SettingsModel { const SettingsModel( {this.isDark = false, + this.alwaysShowCollectionPaneScrollbar = true, this.size, this.offset, this.defaultUriScheme = kDefaultUriScheme, this.saveResponses = true}); final bool isDark; + final bool alwaysShowCollectionPaneScrollbar; final Size? size; final Offset? offset; final String defaultUriScheme; @@ -18,6 +20,7 @@ class SettingsModel { SettingsModel copyWith({ bool? isDark, + bool? alwaysShowCollectionPaneScrollbar, Size? size, Offset? offset, String? defaultUriScheme, @@ -25,6 +28,8 @@ class SettingsModel { }) { return SettingsModel( isDark: isDark ?? this.isDark, + alwaysShowCollectionPaneScrollbar: alwaysShowCollectionPaneScrollbar ?? + this.alwaysShowCollectionPaneScrollbar, size: size ?? this.size, defaultUriScheme: defaultUriScheme ?? this.defaultUriScheme, offset: offset ?? this.offset, @@ -34,6 +39,8 @@ class SettingsModel { factory SettingsModel.fromJson(Map data) { final isDark = data["isDark"] as bool?; + final alwaysShowCollectionPaneScrollbar = + data["alwaysShowCollectionPaneScrollbar"] as bool?; final width = data["width"] as double?; final height = data["height"] as double?; final dx = data["dx"] as double?; @@ -53,6 +60,7 @@ class SettingsModel { return sm.copyWith( isDark: isDark, + alwaysShowCollectionPaneScrollbar: alwaysShowCollectionPaneScrollbar, size: size, offset: offset, defaultUriScheme: defaultUriScheme, @@ -63,6 +71,7 @@ class SettingsModel { Map toJson() { return { "isDark": isDark, + "alwaysShowCollectionPaneScrollbar": alwaysShowCollectionPaneScrollbar, "width": size?.width, "height": size?.height, "dx": offset?.dx, diff --git a/lib/providers/settings_providers.dart b/lib/providers/settings_providers.dart index fec224da..6f8938e2 100644 --- a/lib/providers/settings_providers.dart +++ b/lib/providers/settings_providers.dart @@ -15,6 +15,7 @@ class ThemeStateNotifier extends StateNotifier { Future update({ bool? isDark, + bool? alwaysShowCollectionPaneScrollbar, Size? size, Offset? offset, String? defaultUriScheme, @@ -22,6 +23,7 @@ class ThemeStateNotifier extends StateNotifier { }) async { state = state.copyWith( isDark: isDark, + alwaysShowCollectionPaneScrollbar: alwaysShowCollectionPaneScrollbar, size: size, offset: offset, defaultUriScheme: defaultUriScheme, diff --git a/lib/screens/home_page/collection_pane.dart b/lib/screens/home_page/collection_pane.dart index a9e209ac..b24f12e5 100644 --- a/lib/screens/home_page/collection_pane.dart +++ b/lib/screens/home_page/collection_pane.dart @@ -110,10 +110,12 @@ class _RequestListState extends ConsumerState { @override Widget build(BuildContext context) { final requestItems = ref.watch(collectionStateNotifierProvider)!; + final alwaysShowCollectionPaneScrollbar = ref.watch(settingsProvider + .select((value) => value.alwaysShowCollectionPaneScrollbar)); return Scrollbar( controller: controller, - thumbVisibility: true, + thumbVisibility: alwaysShowCollectionPaneScrollbar ? true : null, radius: const Radius.circular(12), child: ReorderableListView.builder( padding: kPr8CollectionPane, diff --git a/lib/screens/settings_page.dart b/lib/screens/settings_page.dart index e91c3342..e732908f 100644 --- a/lib/screens/settings_page.dart +++ b/lib/screens/settings_page.dart @@ -41,6 +41,19 @@ class _SettingsPageState extends ConsumerState { ref.read(settingsProvider.notifier).update(isDark: value); }, ), + SwitchListTile( + contentPadding: EdgeInsets.zero, + hoverColor: kColorTransparent, + title: const Text('Collection Pane Scrollbar Visiblity'), + subtitle: Text( + 'Current selection: ${settings.alwaysShowCollectionPaneScrollbar ? "Always show" : "Show only when scrolling"}'), + value: settings.alwaysShowCollectionPaneScrollbar, + onChanged: (bool? value) { + ref + .read(settingsProvider.notifier) + .update(alwaysShowCollectionPaneScrollbar: value); + }, + ), ListTile( contentPadding: EdgeInsets.zero, hoverColor: kColorTransparent,