mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-27 09:06:43 +08:00
AppState: Move loading/saving to where the data lies
This commit is contained in:
41
lib/app.dart
41
lib/app.dart
@ -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(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user