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/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(),
));
}

View File

@ -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<Note> 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);
}
}

View File

@ -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<StatefulWidget> 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<StateContainer> {
AppState appState = AppState();
AppState appState;
GitNoteRepository noteRepo;
StateContainerState(this.appState);
@override
void initState() {
super.initState();
@ -279,12 +258,7 @@ class StateContainerState extends State<StateContainer> {
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