diff --git a/lib/screens/onboarding_git_clone.dart b/lib/screens/onboarding_git_clone.dart index 1d23edb1..afc26180 100644 --- a/lib/screens/onboarding_git_clone.dart +++ b/lib/screens/onboarding_git_clone.dart @@ -1,73 +1,16 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:path/path.dart' as p; +class OnBoardingGitClone extends StatelessWidget { + final String errorMessage; -import 'package:journal/analytics.dart'; -import 'package:journal/state_container.dart'; -import 'package:journal/storage/git.dart'; - -class OnBoardingGitClone extends StatefulWidget { - final Function doneFunction; - - OnBoardingGitClone({@required this.doneFunction}); - - @override - OnBoardingGitCloneState createState() { - return new OnBoardingGitCloneState(); - } -} - -class OnBoardingGitCloneState extends State { - String errorMessage = ""; - - @override - void initState() { - super.initState(); - - // FIXME: This is throwing an exception! - _initStateAsync(); - } - - void _initStateAsync() async { - var pref = await SharedPreferences.getInstance(); - String sshCloneUrl = pref.getString("sshCloneUrl"); - - // Just in case it was half cloned because of an error - await _removeExistingClone(); - - String error = await gitClone(sshCloneUrl, "journal"); - if (error != null && error.isNotEmpty) { - setState(() { - getAnalytics().logEvent( - name: "onboarding_gitClone_error", - parameters: { - 'error': error, - }, - ); - errorMessage = error; - }); - } else { - this.widget.doneFunction(); - } - } - - Future _removeExistingClone() async { - var baseDir = await getNotesDir(); - var dotGitDir = new Directory(p.join(baseDir.path, ".git")); - bool exists = await dotGitDir.exists(); - if (exists) { - await baseDir.delete(recursive: true); - await baseDir.create(); - } - } + OnBoardingGitClone({ + this.errorMessage, + }); @override Widget build(BuildContext context) { var children = []; - if (this.errorMessage.isEmpty) { + if (this.errorMessage == null || this.errorMessage.isEmpty) { children = [ Padding( padding: const EdgeInsets.all(8.0), @@ -85,7 +28,7 @@ class OnBoardingGitCloneState extends State { ), ), ]; - } else if (this.errorMessage.isNotEmpty) { + } else { children = [ Padding( padding: const EdgeInsets.all(8.0), diff --git a/lib/screens/onboarding_screens.dart b/lib/screens/onboarding_screens.dart index ed7f7f52..788d0689 100644 --- a/lib/screens/onboarding_screens.dart +++ b/lib/screens/onboarding_screens.dart @@ -1,6 +1,7 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:shared_preferences/shared_preferences.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:path/path.dart' as p; @@ -32,6 +33,7 @@ class OnBoardingScreenState extends State { var _pageSshKeyDone = false; var _gitCloneUrl = ""; + String gitCloneErrorMessage = ""; var pageController = PageController(); final GlobalKey _scaffoldKey = new GlobalKey(); @@ -108,13 +110,10 @@ class OnBoardingScreenState extends State { curve: Curves.easeIn, ); - SharedPreferences.getInstance().then((SharedPreferences pref) { - // We aren't calling setState as this isn't being used for rendering - _gitCloneUrl = sshUrl; + // We aren't calling setState as this isn't being used for rendering + _gitCloneUrl = sshUrl; - pref.setString("sshCloneUrl", sshUrl); - this._generateSshKey(); - }); + this._generateSshKey(); getAnalytics().logEvent( name: "onboarding_git_url_enterred", @@ -131,6 +130,8 @@ class OnBoardingScreenState extends State { curve: Curves.easeIn, ); + _startGitClone(); + getAnalytics().logEvent( name: "onboarding_public_key_copied", parameters: {}, @@ -141,15 +142,7 @@ class OnBoardingScreenState extends State { } if ((pos == 4 && _createNewRepo) || pos == 3) { - return OnBoardingGitClone( - doneFunction: () { - getAnalytics().logEvent( - name: "onboarding_complete", - parameters: {}, - ); - this.widget.onBoardingCompletedFunction(); - }, - ); + return OnBoardingGitClone(errorMessage: gitCloneErrorMessage); } }, itemCount: pageCount, @@ -243,6 +236,40 @@ class OnBoardingScreenState extends State { print(stack.toString()); } } + + void _startGitClone() async { + // Just in case it was half cloned because of an error + await _removeExistingClone(); + + String error = await gitClone(_gitCloneUrl, "journal"); + if (error != null && error.isNotEmpty) { + setState(() { + getAnalytics().logEvent( + name: "onboarding_gitClone_error", + parameters: { + 'error': error, + }, + ); + gitCloneErrorMessage = error; + }); + } else { + getAnalytics().logEvent( + name: "onboarding_complete", + parameters: {}, + ); + this.widget.onBoardingCompletedFunction(); + } + } + + Future _removeExistingClone() async { + var baseDir = await getNotesDir(); + var dotGitDir = new Directory(p.join(baseDir.path, ".git")); + bool exists = await dotGitDir.exists(); + if (exists) { + await baseDir.delete(recursive: true); + await baseDir.create(); + } + } } class OnBoardingInitialChoice extends StatelessWidget {