Save the selected sorting mode

This commit is contained in:
Vishesh Handa
2020-02-09 22:41:16 +01:00
parent e0f03d703e
commit 1d0cf3ab6d
4 changed files with 68 additions and 7 deletions

View File

@ -1,11 +1,10 @@
import 'package:flutter/material.dart';
import 'package:gitjournal/settings.dart';
import 'note.dart';
import 'notes_folder.dart';
import 'notes_folder_notifier.dart';
enum SortingMode { Modified, Created }
class SortedNotesFolder
with NotesFolderNotifier
implements NotesFolderReadOnly {

View File

@ -5,6 +5,7 @@ import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/core/sorted_notes_folder.dart';
import 'package:gitjournal/screens/note_editor.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/state_container.dart';
import 'package:gitjournal/utils.dart';
import 'package:gitjournal/widgets/app_drawer.dart';
@ -30,7 +31,7 @@ class _JournalListingScreenState extends State<JournalListingScreen> {
super.initState();
sortedNotesFolder = SortedNotesFolder(
folder: widget.notesFolder,
sortingMode: SortingMode.Modified,
sortingMode: Settings.instance.sortingMode,
);
}
@ -150,8 +151,12 @@ class _JournalListingScreenState extends State<JournalListingScreen> {
},
);
setState(() {
sortedNotesFolder.changeSortingMode(newSortingMode);
});
if (newSortingMode != null) {
setState(() {
sortedNotesFolder.changeSortingMode(newSortingMode);
Settings.instance.sortingMode = newSortingMode;
Settings.instance.save();
});
}
}
}

View File

@ -133,7 +133,7 @@ class SettingsListState extends State<SettingsList> {
dynamicTheme.setBrightness(b);
},
),
SettingsHeader('Note Settings'),
if (defaultFolderConfigurable) SettingsHeader('Note Settings'),
if (defaultFolderConfigurable)
ListTile(
title: const Text("Default Folder for new notes"),

View File

@ -21,6 +21,7 @@ class Settings {
String defaultNewNoteFolder = "journal";
RemoteSyncFrequency remoteSyncFrequency = RemoteSyncFrequency.Default;
SortingMode sortingMode = SortingMode.Default;
int version = 0;
void load(SharedPreferences pref) {
@ -42,6 +43,8 @@ class Settings {
remoteSyncFrequency = RemoteSyncFrequency.fromInternalString(
pref.getString("remoteSyncFrequency"));
sortingMode = SortingMode.fromInternalString(pref.getString("sortingMode"));
version = pref.getInt("settingsVersion") ?? version;
}
@ -56,6 +59,7 @@ class Settings {
pref.setString("defaultNewNoteFolder", defaultNewNoteFolder);
pref.setString(
"remoteSyncFrequency", remoteSyncFrequency.toInternalString());
pref.setString("sortingMode", sortingMode.toInternalString());
pref.setInt("settingsVersion", version);
// Shouldn't we check if something has actually changed?
@ -179,4 +183,57 @@ class RemoteSyncFrequency {
}
return Default;
}
@override
String toString() {
assert(false, "RemoteSyncFrequency toString should never be called");
return "";
}
}
class SortingMode {
static const Modified = SortingMode("Last Modified", "Modified");
static const Created = SortingMode("Created", "Created");
static const Default = Modified;
final String _str;
final String _publicString;
const SortingMode(this._publicString, this._str);
String toInternalString() {
return _str;
}
String toPublicString() {
return _publicString;
}
static const options = <SortingMode>[
Modified,
Created,
];
static SortingMode fromInternalString(String str) {
for (var opt in options) {
if (opt.toInternalString() == str) {
return opt;
}
}
return Default;
}
static SortingMode fromPublicString(String str) {
for (var opt in options) {
if (opt.toPublicString() == str) {
return opt;
}
}
return Default;
}
@override
String toString() {
assert(false, "SortingMode toString should never be called");
return "";
}
}