From 3d8aa2ad708ca85a81e6919b9f32ed5394124cc8 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 4 Oct 2019 04:35:02 +0200 Subject: [PATCH] AppState: Move loading/saving to where the data lies --- lib/app.dart | 41 +++++++++---------------------------- lib/appstate.dart | 44 ++++++++++++++++++++++++++++++++++------ lib/state_container.dart | 40 +++++++----------------------------- 3 files changed, 55 insertions(+), 70 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index 1b295962..1cee0add 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -11,6 +11,7 @@ import 'package:journal/screens/settings_screen.dart'; import 'package:journal/settings.dart'; import 'package:journal/state_container.dart'; import 'package:journal/utils.dart'; +import 'package:journal/appstate.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:dynamic_theme/dynamic_theme.dart'; @@ -22,50 +23,28 @@ class JournalApp extends StatelessWidget { Fimber.plantTree(DebugTree.elapsed(useColors: true)); var pref = await SharedPreferences.getInstance(); + var appState = AppState(pref); - var localGitRepoConfigured = - 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(" ------------------ "); + appState.dumpToLog(); _enableAnalyticsIfPossible(); - if (localGitRepoConfigured == false) { + if (appState.localGitRepoConfigured == false) { // FIXME: What about exceptions! - localGitRepoPath = "journal_local"; - await GitRepo.init(localGitRepoPath); + appState.localGitRepoPath = "journal_local"; + await GitRepo.init(appState.localGitRepoPath); - localGitRepoConfigured = true; - - pref.setBool("localGitRepoConfigured", localGitRepoConfigured); - pref.setString("localGitRepoPath", localGitRepoPath); + appState.localGitRepoConfigured = true; + appState.save(pref); } var dir = await getGitBaseDirectory(); + appState.gitBaseDirectory = dir.path; Settings.instance.load(pref); runApp(StateContainer( - localGitRepoConfigured: localGitRepoConfigured, - remoteGitRepoConfigured: remoteGitRepoConfigured, - localGitRepoPath: localGitRepoPath, - remoteGitRepoFolderName: remoteGitRepoFolderName, - remoteGitRepoSubFolder: remoteGitRepoSubFolder, - gitBaseDirectory: dir.path, - onBoardingCompleted: onBoardingCompleted, + appState: appState, child: JournalApp(), )); } diff --git a/lib/appstate.dart b/lib/appstate.dart index c8da5550..20e6bda8 100644 --- a/lib/appstate.dart +++ b/lib/appstate.dart @@ -1,6 +1,11 @@ +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:fimber/fimber.dart'; import 'package:journal/note.dart'; class AppState { + // + // Saved on Disk + // // FIXME: Make these 2 final String localGitRepoPath = ""; bool localGitRepoConfigured = false; @@ -10,17 +15,44 @@ class AppState { String remoteGitRepoSubFolder = ""; bool remoteGitRepoConfigured = false; - bool hasJournalEntries = false; bool onBoardingCompleted = false; - // FIXME: Make final + // + // Temporary + // /// This is the directory where all the git repos are stored String gitBaseDirectory = ""; + bool hasJournalEntries = false; - bool isLoadingFromDisk; + bool isLoadingFromDisk = false; List notes = []; - AppState({ - this.isLoadingFromDisk = false, - }); + AppState(SharedPreferences pref) { + 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); + } } diff --git a/lib/state_container.dart b/lib/state_container.dart index b612f8f6..624eec2a 100644 --- a/lib/state_container.dart +++ b/lib/state_container.dart @@ -15,23 +15,9 @@ import 'package:shared_preferences/shared_preferences.dart'; class StateContainer extends StatefulWidget { final Widget child; - final bool localGitRepoConfigured; - final bool remoteGitRepoConfigured; - final String localGitRepoPath; - final String remoteGitRepoFolderName; - final String remoteGitRepoSubFolder; - - final String gitBaseDirectory; - final bool onBoardingCompleted; - + final AppState appState; StateContainer({ - @required this.localGitRepoConfigured, - @required this.remoteGitRepoConfigured, - @required this.localGitRepoPath, - @required this.remoteGitRepoFolderName, - @required this.remoteGitRepoSubFolder, - @required this.gitBaseDirectory, - @required this.onBoardingCompleted, + @required this.appState, @required this.child, }); @@ -43,23 +29,16 @@ class StateContainer extends StatefulWidget { @override State createState() { - var st = StateContainerState(); - 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; + return StateContainerState(appState); } } class StateContainerState extends State { - AppState appState = AppState(); + AppState appState; GitNoteRepository noteRepo; + StateContainerState(this.appState); + @override void initState() { super.initState(); @@ -279,12 +258,7 @@ class StateContainerState extends State { Future _persistConfig() async { var pref = await SharedPreferences.getInstance(); - await pref.setBool( - "remoteGitRepoConfigured", appState.remoteGitRepoConfigured); - await pref.setString("remoteGitRepoPath", appState.remoteGitRepoFolderName); - await pref.setString( - "remoteGitRepoSubFolder", appState.remoteGitRepoSubFolder); - await pref.setBool("onBoardingCompleted", appState.onBoardingCompleted); + await appState.save(pref); } @override