From cb98f3cdf4783b52a323aea8ed778d09d46c25c6 Mon Sep 17 00:00:00 2001 From: olorin99 <36951539+olorin99@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:57:40 +1000 Subject: [PATCH] Add separate default sort for posts feed. (#10) --- lib/src/screens/feed_screen.dart | 9 ++++- .../screens/settings/settings_controller.dart | 32 ++++++++++++---- lib/src/screens/settings/settings_screen.dart | 37 +++++++++++++++---- 3 files changed, 63 insertions(+), 15 deletions(-) diff --git a/lib/src/screens/feed_screen.dart b/lib/src/screens/feed_screen.dart index 17873ba..50d6a5c 100644 --- a/lib/src/screens/feed_screen.dart +++ b/lib/src/screens/feed_screen.dart @@ -46,7 +46,9 @@ class _FeedScreenState extends State { ? context.read().defaultFeedMode : FeedMode.entries; _sort = widget.source == null - ? context.read().defaultFeedSort + ? _mode == FeedMode.entries + ? context.read().defaultEntriesFeedSort + : context.read().defaultPostsFeedSort : context.read().defaultExploreFeedSort; } @@ -85,6 +87,11 @@ class _FeedScreenState extends State { onSelectionChanged: (Set newSelection) { setState(() { _mode = newSelection.first; + _sort = widget.source == null + ? _mode == FeedMode.entries + ? context.read().defaultEntriesFeedSort + : context.read().defaultPostsFeedSort + : context.read().defaultExploreFeedSort; }); }, ), diff --git a/lib/src/screens/settings/settings_controller.dart b/lib/src/screens/settings/settings_controller.dart index a0cf3a2..a97846d 100644 --- a/lib/src/screens/settings/settings_controller.dart +++ b/lib/src/screens/settings/settings_controller.dart @@ -14,8 +14,10 @@ class SettingsController with ChangeNotifier { ThemeMode get themeMode => _themeMode; late FeedMode _defaultFeedMode; FeedMode get defaultFeedMode => _defaultFeedMode; - late FeedSort _defaultFeedSort; - FeedSort get defaultFeedSort => _defaultFeedSort; + late FeedSort _defaultEntriesFeedSort; + FeedSort get defaultEntriesFeedSort => _defaultEntriesFeedSort; + late FeedSort _defaultPostsFeedSort; + FeedSort get defaultPostsFeedSort => _defaultPostsFeedSort; late FeedSort _defaultExploreFeedSort; FeedSort get defaultExploreFeedSort => _defaultExploreFeedSort; late CommentSort _defaultCommentSort; @@ -42,8 +44,11 @@ class SettingsController with ChangeNotifier { _defaultFeedMode = prefs.getString('defaultFeedMode') != null ? FeedMode.values.byName(prefs.getString("defaultFeedMode")!) : FeedMode.entries; - _defaultFeedSort = prefs.getString('defaultFeedSort') != null - ? FeedSort.values.byName(prefs.getString("defaultFeedSort")!) + _defaultEntriesFeedSort = prefs.getString('defaultEntriesFeedSort') != null + ? FeedSort.values.byName(prefs.getString("defaultEntriesFeedSort")!) + : FeedSort.hot; + _defaultPostsFeedSort = prefs.getString('defaultPostsFeedSort') != null + ? FeedSort.values.byName(prefs.getString("defaultPostsFeedSort")!) : FeedSort.hot; _defaultExploreFeedSort = prefs.getString('defaultExploreFeedSort') != null ? FeedSort.values.byName(prefs.getString("defaultExploreFeedSort")!) @@ -92,12 +97,12 @@ class SettingsController with ChangeNotifier { await prefs.setString('defaultFeedMode', newDefaultFeedMode.name); } - Future updateDefaultFeedSort(FeedSort? newDefaultFeedSort) async { + Future updateDefaultEntriesFeedSort(FeedSort? newDefaultFeedSort) async { if (newDefaultFeedSort == null) return; - if (newDefaultFeedSort == _defaultFeedSort) return; + if (newDefaultFeedSort == _defaultEntriesFeedSort) return; - _defaultFeedSort = newDefaultFeedSort; + _defaultEntriesFeedSort = newDefaultFeedSort; notifyListeners(); @@ -105,6 +110,19 @@ class SettingsController with ChangeNotifier { await prefs.setString('defaultFeedSort', newDefaultFeedSort.name); } + Future updateDefaultPostsFeedSort(FeedSort? newDefaultFeedSort) async { + if (newDefaultFeedSort == null) return; + + if (newDefaultFeedSort == _defaultPostsFeedSort) return; + + _defaultPostsFeedSort = newDefaultFeedSort; + + notifyListeners(); + + final SharedPreferences prefs = await SharedPreferences.getInstance(); + await prefs.setString('defaultPostsFeedSort', newDefaultFeedSort.name); + } + Future updateDefaultExploreFeedSort( FeedSort? newDefaultExploreFeedSort, ) async { diff --git a/lib/src/screens/settings/settings_screen.dart b/lib/src/screens/settings/settings_screen.dart index f155938..ad6fa34 100644 --- a/lib/src/screens/settings/settings_screen.dart +++ b/lib/src/screens/settings/settings_screen.dart @@ -19,8 +19,11 @@ class SettingsScreen extends StatelessWidget { final currentDefaultFeedMode = feedModeSelect.options.firstWhere( (option) => option.value == controller.defaultFeedMode, ); - final currentDefaultFeedSort = feedSortSelect.options.firstWhere( - (option) => option.value == controller.defaultFeedSort, + final currentDefaultEntriesFeedSort = feedSortSelect.options.firstWhere( + (option) => option.value == controller.defaultEntriesFeedSort, + ); + final currentDefaultPostsFeedSort = feedSortSelect.options.firstWhere( + (option) => option.value == controller.defaultPostsFeedSort, ); final currentDefaultExploreFeedSort = feedSortSelect.options.firstWhere( (option) => option.value == controller.defaultExploreFeedSort, @@ -86,22 +89,42 @@ class SettingsScreen extends StatelessWidget { ), ), ListTile( - title: const Text('Default Feed Sort'), + title: const Text('Default Threads Feed Sort'), leading: const Icon(Icons.sort), onTap: () async { - controller.updateDefaultFeedSort( + controller.updateDefaultEntriesFeedSort( await feedSortSelect.inquireSelection( context, - currentDefaultFeedSort.value, + currentDefaultEntriesFeedSort.value, ), ); }, trailing: Row( mainAxisSize: MainAxisSize.min, children: [ - Icon(currentDefaultFeedSort.icon), + Icon(currentDefaultEntriesFeedSort.icon), const SizedBox(width: 4), - Text(currentDefaultFeedSort.title), + Text(currentDefaultEntriesFeedSort.title), + ], + ), + ), + ListTile( + title: const Text('Default Posts Feed Sort'), + leading: const Icon(Icons.sort), + onTap: () async { + controller.updateDefaultPostsFeedSort( + await feedSortSelect.inquireSelection( + context, + currentDefaultPostsFeedSort.value, + ), + ); + }, + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(currentDefaultPostsFeedSort.icon), + const SizedBox(width: 4), + Text(currentDefaultPostsFeedSort.title), ], ), ),