diff --git a/lib/app.dart b/lib/app.dart index 163e83c8..295485f6 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:journal/state_container.dart'; import 'package:journal/screens/home_screen.dart'; import 'package:journal/screens/onboarding_screens.dart'; @@ -12,8 +13,12 @@ class JournalApp extends StatelessWidget { @override Widget build(BuildContext context) { - var onBoardingDone = false; - var home = onBoardingDone ? new HomeScreen() : new OnBoardingScreen(); + final stateContainer = StateContainer.of(context); + + var onBoardingDone = stateContainer.appState.onBoardingCompleted; + var home = onBoardingDone + ? new HomeScreen() + : new OnBoardingScreen(stateContainer.completeOnBoarding); return new MaterialApp( title: 'Journal', diff --git a/lib/appstate.dart b/lib/appstate.dart new file mode 100644 index 00000000..8fe3dbdd --- /dev/null +++ b/lib/appstate.dart @@ -0,0 +1,13 @@ +import 'package:journal/note.dart'; + +class AppState { + bool onBoardingCompleted; + bool isLoadingFromDisk; + List notes; + + AppState({ + this.onBoardingCompleted = false, + this.isLoadingFromDisk = false, + this.notes = const [], + }); +} diff --git a/lib/note.dart b/lib/note.dart index 59aac733..1758b8cb 100644 --- a/lib/note.dart +++ b/lib/note.dart @@ -60,23 +60,3 @@ class Note implements Comparable { return created.compareTo(other.created); } } - -class AppState { - bool isLoadingFromDisk; - bool localStateModified; - - bool isLoadingRemoteState; - bool remoteStateModified; - - List notes; - - AppState({ - this.isLoadingFromDisk = false, - this.localStateModified = false, - this.isLoadingRemoteState = false, - this.remoteStateModified = false, - this.notes = const [], - }); - - //factory AppState.loading() => AppState(isLoading: true); -} diff --git a/lib/screens/onboarding_screens.dart b/lib/screens/onboarding_screens.dart index 7682d42b..f9d27b60 100644 --- a/lib/screens/onboarding_screens.dart +++ b/lib/screens/onboarding_screens.dart @@ -4,6 +4,10 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:journal/storage/git.dart'; class OnBoardingScreen extends StatelessWidget { + final Function onBoardingCompletedFunction; + + OnBoardingScreen(this.onBoardingCompletedFunction); + @override Widget build(BuildContext context) { var pageController = PageController(); @@ -26,7 +30,9 @@ class OnBoardingScreen extends StatelessWidget { curve: Curves.easeIn, ); }), - OnBoardingGitClone(), + OnBoardingGitClone( + doneFunction: this.onBoardingCompletedFunction, + ), ], ); } @@ -151,17 +157,25 @@ class OnBoardingSshKeyState extends State { } class OnBoardingGitClone extends StatefulWidget { + final Function doneFunction; + + OnBoardingGitClone({@required this.doneFunction}); + @override OnBoardingGitCloneState createState() { - return new OnBoardingGitCloneState(); + return new OnBoardingGitCloneState(doneFunction: this.doneFunction); } } class OnBoardingGitCloneState extends State { + final Function doneFunction; String errorMessage = ""; + OnBoardingGitCloneState({@required this.doneFunction}); + @override void initState() { + super.initState(); _initStateAsync(); } @@ -174,6 +188,8 @@ class OnBoardingGitCloneState extends State { setState(() { errorMessage = error; }); + } else { + doneFunction(); } } @@ -191,7 +207,7 @@ class OnBoardingGitCloneState extends State { value: null, ), ]; - } else { + } else if (this.errorMessage.isNotEmpty) { children = [ Text( 'Failed', diff --git a/lib/state_container.dart b/lib/state_container.dart index 7d39a00f..d782cdb3 100644 --- a/lib/state_container.dart +++ b/lib/state_container.dart @@ -6,8 +6,8 @@ import 'package:flutter/material.dart'; import 'package:path/path.dart' as p; import 'package:uuid/uuid.dart'; +import 'package:journal/appstate.dart'; import 'package:journal/note.dart'; -import 'package:journal/storage/serializers.dart'; import 'package:journal/storage/notes_repository.dart'; import 'package:journal/storage/git_storage.dart'; import 'package:journal/storage/git.dart'; @@ -52,8 +52,10 @@ class StateContainerState extends State { void initState() { super.initState(); - _loadNotesFromDisk(); - _syncNotes(); + if (appState.onBoardingCompleted) { + _loadNotesFromDisk(); + _syncNotes(); + } } void _loadNotesFromDisk() { @@ -117,6 +119,15 @@ class StateContainerState extends State { }); } + void completeOnBoarding() { + setState(() { + this.appState.onBoardingCompleted = true; + + _loadNotesFromDisk(); + _syncNotes(); + }); + } + @override Widget build(BuildContext context) { return _InheritedStateContainer(