Add separate default sort for posts feed. (#10)

This commit is contained in:
olorin99 2024-01-29 12:57:40 +10:00 committed by GitHub
parent 535a194546
commit cb98f3cdf4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 63 additions and 15 deletions

View File

@ -46,7 +46,9 @@ class _FeedScreenState extends State<FeedScreen> {
? context.read<SettingsController>().defaultFeedMode
: FeedMode.entries;
_sort = widget.source == null
? context.read<SettingsController>().defaultFeedSort
? _mode == FeedMode.entries
? context.read<SettingsController>().defaultEntriesFeedSort
: context.read<SettingsController>().defaultPostsFeedSort
: context.read<SettingsController>().defaultExploreFeedSort;
}
@ -85,6 +87,11 @@ class _FeedScreenState extends State<FeedScreen> {
onSelectionChanged: (Set<FeedMode> newSelection) {
setState(() {
_mode = newSelection.first;
_sort = widget.source == null
? _mode == FeedMode.entries
? context.read<SettingsController>().defaultEntriesFeedSort
: context.read<SettingsController>().defaultPostsFeedSort
: context.read<SettingsController>().defaultExploreFeedSort;
});
},
),

View File

@ -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<void> updateDefaultFeedSort(FeedSort? newDefaultFeedSort) async {
Future<void> 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<void> 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<void> updateDefaultExploreFeedSort(
FeedSort? newDefaultExploreFeedSort,
) async {

View File

@ -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),
],
),
),