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/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(),
|
||||
));
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user