AppState: Move loading/saving to where the data lies

This commit is contained in:
Vishesh Handa
2019-10-04 04:35:02 +02:00
parent 4058428241
commit 3d8aa2ad70
3 changed files with 55 additions and 70 deletions

View File

@ -11,6 +11,7 @@ import 'package:journal/screens/settings_screen.dart';
import 'package:journal/settings.dart'; import 'package:journal/settings.dart';
import 'package:journal/state_container.dart'; import 'package:journal/state_container.dart';
import 'package:journal/utils.dart'; import 'package:journal/utils.dart';
import 'package:journal/appstate.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:dynamic_theme/dynamic_theme.dart'; import 'package:dynamic_theme/dynamic_theme.dart';
@ -22,50 +23,28 @@ class JournalApp extends StatelessWidget {
Fimber.plantTree(DebugTree.elapsed(useColors: true)); Fimber.plantTree(DebugTree.elapsed(useColors: true));
var pref = await SharedPreferences.getInstance(); var pref = await SharedPreferences.getInstance();
var appState = AppState(pref);
var localGitRepoConfigured = appState.dumpToLog();
pref.getBool("localGitRepoConfigured") ?? false;
var remoteGitRepoConfigured =
pref.getBool("remoteGitRepoConfigured") ?? false;
var localGitRepoPath = pref.getString("localGitRepoPath") ?? "";
var remoteGitRepoFolderName = pref.getString("remoteGitRepoPath") ?? "";
var remoteGitRepoSubFolder = pref.getString("remoteGitRepoSubFolder") ?? "";
var onBoardingCompleted = pref.getBool("onBoardingCompleted") ?? false;
Fimber.d(" ---- Settings ---- ");
Fimber.d("localGitRepoConfigured: $localGitRepoConfigured");
Fimber.d("remoteGitRepoConfigured: $remoteGitRepoConfigured");
Fimber.d("localGitRepoPath: $localGitRepoPath");
Fimber.d("remoteGitRepoFolderName: $remoteGitRepoFolderName");
Fimber.d("remoteGitRepoSubFolder: $remoteGitRepoSubFolder");
Fimber.d("onBoardingCompleted: $onBoardingCompleted");
Fimber.d(" ------------------ ");
_enableAnalyticsIfPossible(); _enableAnalyticsIfPossible();
if (localGitRepoConfigured == false) { if (appState.localGitRepoConfigured == false) {
// FIXME: What about exceptions! // FIXME: What about exceptions!
localGitRepoPath = "journal_local"; appState.localGitRepoPath = "journal_local";
await GitRepo.init(localGitRepoPath); await GitRepo.init(appState.localGitRepoPath);
localGitRepoConfigured = true; appState.localGitRepoConfigured = true;
appState.save(pref);
pref.setBool("localGitRepoConfigured", localGitRepoConfigured);
pref.setString("localGitRepoPath", localGitRepoPath);
} }
var dir = await getGitBaseDirectory(); var dir = await getGitBaseDirectory();
appState.gitBaseDirectory = dir.path;
Settings.instance.load(pref); Settings.instance.load(pref);
runApp(StateContainer( runApp(StateContainer(
localGitRepoConfigured: localGitRepoConfigured, appState: appState,
remoteGitRepoConfigured: remoteGitRepoConfigured,
localGitRepoPath: localGitRepoPath,
remoteGitRepoFolderName: remoteGitRepoFolderName,
remoteGitRepoSubFolder: remoteGitRepoSubFolder,
gitBaseDirectory: dir.path,
onBoardingCompleted: onBoardingCompleted,
child: JournalApp(), child: JournalApp(),
)); ));
} }

View File

@ -1,6 +1,11 @@
import 'package:shared_preferences/shared_preferences.dart';
import 'package:fimber/fimber.dart';
import 'package:journal/note.dart'; import 'package:journal/note.dart';
class AppState { class AppState {
//
// Saved on Disk
//
// FIXME: Make these 2 final // FIXME: Make these 2 final
String localGitRepoPath = ""; String localGitRepoPath = "";
bool localGitRepoConfigured = false; bool localGitRepoConfigured = false;
@ -10,17 +15,44 @@ class AppState {
String remoteGitRepoSubFolder = ""; String remoteGitRepoSubFolder = "";
bool remoteGitRepoConfigured = false; bool remoteGitRepoConfigured = false;
bool hasJournalEntries = false;
bool onBoardingCompleted = false; bool onBoardingCompleted = false;
// FIXME: Make final //
// Temporary
//
/// This is the directory where all the git repos are stored /// This is the directory where all the git repos are stored
String gitBaseDirectory = ""; String gitBaseDirectory = "";
bool hasJournalEntries = false;
bool isLoadingFromDisk; bool isLoadingFromDisk = false;
List<Note> notes = []; List<Note> notes = [];
AppState({ AppState(SharedPreferences pref) {
this.isLoadingFromDisk = false, localGitRepoConfigured = pref.getBool("localGitRepoConfigured") ?? false;
}); remoteGitRepoConfigured = pref.getBool("remoteGitRepoConfigured") ?? false;
localGitRepoPath = pref.getString("localGitRepoPath") ?? "";
remoteGitRepoFolderName = pref.getString("remoteGitRepoPath") ?? "";
remoteGitRepoSubFolder = pref.getString("remoteGitRepoSubFolder") ?? "";
onBoardingCompleted = pref.getBool("onBoardingCompleted") ?? false;
}
void dumpToLog() {
Fimber.d(" ---- Settings ---- ");
Fimber.d("localGitRepoConfigured: $localGitRepoConfigured");
Fimber.d("remoteGitRepoConfigured: $remoteGitRepoConfigured");
Fimber.d("localGitRepoPath: $localGitRepoPath");
Fimber.d("remoteGitRepoFolderName: $remoteGitRepoFolderName");
Fimber.d("remoteGitRepoSubFolder: $remoteGitRepoSubFolder");
Fimber.d("onBoardingCompleted: $onBoardingCompleted");
Fimber.d(" ------------------ ");
}
Future save(SharedPreferences pref) async {
await pref.setBool("localGitRepoConfigured", localGitRepoConfigured);
await pref.setBool("remoteGitRepoConfigured", remoteGitRepoConfigured);
await pref.setString("localGitRepoPath", localGitRepoPath);
await pref.setString("remoteGitRepoPath", remoteGitRepoFolderName);
await pref.setString("remoteGitRepoSubFolder", remoteGitRepoSubFolder);
await pref.setBool("onBoardingCompleted", onBoardingCompleted);
}
} }

View File

@ -15,23 +15,9 @@ import 'package:shared_preferences/shared_preferences.dart';
class StateContainer extends StatefulWidget { class StateContainer extends StatefulWidget {
final Widget child; final Widget child;
final bool localGitRepoConfigured; final AppState appState;
final bool remoteGitRepoConfigured;
final String localGitRepoPath;
final String remoteGitRepoFolderName;
final String remoteGitRepoSubFolder;
final String gitBaseDirectory;
final bool onBoardingCompleted;
StateContainer({ StateContainer({
@required this.localGitRepoConfigured, @required this.appState,
@required this.remoteGitRepoConfigured,
@required this.localGitRepoPath,
@required this.remoteGitRepoFolderName,
@required this.remoteGitRepoSubFolder,
@required this.gitBaseDirectory,
@required this.onBoardingCompleted,
@required this.child, @required this.child,
}); });
@ -43,23 +29,16 @@ class StateContainer extends StatefulWidget {
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
var st = StateContainerState(); return StateContainerState(appState);
st.appState.localGitRepoConfigured = localGitRepoConfigured;
st.appState.remoteGitRepoConfigured = remoteGitRepoConfigured;
st.appState.localGitRepoPath = localGitRepoPath;
st.appState.remoteGitRepoFolderName = remoteGitRepoFolderName;
st.appState.remoteGitRepoSubFolder = remoteGitRepoSubFolder;
st.appState.gitBaseDirectory = gitBaseDirectory;
st.appState.onBoardingCompleted = onBoardingCompleted;
return st;
} }
} }
class StateContainerState extends State<StateContainer> { class StateContainerState extends State<StateContainer> {
AppState appState = AppState(); AppState appState;
GitNoteRepository noteRepo; GitNoteRepository noteRepo;
StateContainerState(this.appState);
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -279,12 +258,7 @@ class StateContainerState extends State<StateContainer> {
Future _persistConfig() async { Future _persistConfig() async {
var pref = await SharedPreferences.getInstance(); var pref = await SharedPreferences.getInstance();
await pref.setBool( await appState.save(pref);
"remoteGitRepoConfigured", appState.remoteGitRepoConfigured);
await pref.setString("remoteGitRepoPath", appState.remoteGitRepoFolderName);
await pref.setString(
"remoteGitRepoSubFolder", appState.remoteGitRepoSubFolder);
await pref.setBool("onBoardingCompleted", appState.onBoardingCompleted);
} }
@override @override