Hookup onBoarding screen to app

* I should probably stop calling in an onboarding screen, since it's now
just a way to setup sync.

* It overall feels quite ugly, and unpolished.
This commit is contained in:
Vishesh Handa
2019-01-23 12:12:15 +01:00
parent dfd5d6f6d2
commit 2b1ac6cad7
3 changed files with 32 additions and 18 deletions

View File

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:journal/screens/home_screen.dart'; import 'package:journal/screens/home_screen.dart';
import 'package:journal/screens/settings_screen.dart'; import 'package:journal/screens/settings_screen.dart';
import 'package:journal/screens/onboarding_screens.dart';
import 'package:journal/state_container.dart';
import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_analytics/observer.dart'; import 'package:firebase_analytics/observer.dart';
@ -18,6 +20,11 @@ class JournalApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var stateContainer = StateContainer.of(context);
var onCompleted = () {
stateContainer.completeOnBoarding();
};
return new MaterialApp( return new MaterialApp(
title: 'GitJournal', title: 'GitJournal',
theme: new ThemeData( theme: new ThemeData(
@ -32,6 +39,7 @@ class JournalApp extends StatelessWidget {
routes: { routes: {
'/': (context) => HomeScreen(), '/': (context) => HomeScreen(),
'/settings': (context) => SettingsScreen(), '/settings': (context) => SettingsScreen(),
'/setupRemoteGit': (context) => OnBoardingScreen(onCompleted),
}, },
); );
} }

View File

@ -134,7 +134,8 @@ class OnBoardingScreenState extends State<OnBoardingScreen> {
curve: Curves.easeIn, curve: Curves.easeIn,
); );
_startGitClone(); var appState = StateContainer.of(context).appState;
_startGitClone(appState.gitBaseDirectory);
getAnalytics().logEvent( getAnalytics().logEvent(
name: "onboarding_public_key_copied", name: "onboarding_public_key_copied",
@ -275,9 +276,9 @@ class OnBoardingScreenState extends State<OnBoardingScreen> {
} }
} }
void _startGitClone() async { void _startGitClone(String basePath) async {
// Just in case it was half cloned because of an error // Just in case it was half cloned because of an error
await _removeExistingClone(); await _removeExistingClone(basePath);
String error = await gitClone(_gitCloneUrl, "journal"); String error = await gitClone(_gitCloneUrl, "journal");
if (error != null && error.isNotEmpty) { if (error != null && error.isNotEmpty) {
@ -299,17 +300,14 @@ class OnBoardingScreenState extends State<OnBoardingScreen> {
} }
} }
Future _removeExistingClone() async { Future _removeExistingClone(String baseDirPath) async {
// FIXME: Implement this var baseDir = new Directory(baseDirPath);
/* var dotGitDir = new Directory(p.join(baseDir.path, "journal", ".git"));
var baseDir = await getNotesDir();
var dotGitDir = new Directory(p.join(baseDir.path, ".git"));
bool exists = await dotGitDir.exists(); bool exists = await dotGitDir.exists();
if (exists) { if (exists) {
await baseDir.delete(recursive: true); await baseDir.delete(recursive: true);
await baseDir.create(); await baseDir.create();
} }
*/
} }
} }

View File

@ -10,9 +10,10 @@ import 'package:journal/appstate.dart';
import 'package:journal/note.dart'; import 'package:journal/note.dart';
import 'package:journal/storage/notes_repository.dart'; import 'package:journal/storage/notes_repository.dart';
import 'package:journal/storage/git_storage.dart'; import 'package:journal/storage/git_storage.dart';
import 'package:journal/apis/git.dart';
import 'package:journal/datetime_utils.dart'; import 'package:journal/datetime_utils.dart';
import 'package:journal/apis/git_migration.dart';
class StateContainer extends StatefulWidget { class StateContainer extends StatefulWidget {
final Widget child; final Widget child;
final bool localGitRepoConfigured; final bool localGitRepoConfigured;
@ -185,20 +186,27 @@ class StateContainerState extends State<StateContainer> {
} }
void completeOnBoarding() { void completeOnBoarding() {
setState(() { setState(() async {
//this.appState.onBoardingCompleted = true; this.appState.remoteGitRepoConfigured = true;
this.appState.remoteGitRepoPath = "journal";
_persistOnBoardingCompleted(); await migrateGitRepo(
fromGitBasePath: appState.localGitRepoPath,
toGitBasePath: appState.localGitRepoPath,
gitBasePath: appState.gitBaseDirectory,
);
noteRepo = new GitNoteRepository(
baseDirectory: appState.gitBaseDirectory,
dirName: appState.remoteGitRepoPath,
);
_persistConfig();
_loadNotesFromDisk(); _loadNotesFromDisk();
_syncNotes(); _syncNotes();
}); });
} }
void _persistOnBoardingCompleted() async {
var pref = await SharedPreferences.getInstance();
pref.setBool("onBoardingCompleted", true);
}
Future _persistConfig() async { Future _persistConfig() async {
var pref = await SharedPreferences.getInstance(); var pref = await SharedPreferences.getInstance();
await pref.setBool( await pref.setBool(