From 839da00307001847733be092771eba6fb75b4326 Mon Sep 17 00:00:00 2001 From: Vishesh Handa <me@vhanda.in> Date: Fri, 11 Jan 2019 18:42:26 +0100 Subject: [PATCH] OnBoardingScreens: Do not let us skip screens This requires us to dynamically generate the screens based on if we have completed the screen or not. --- lib/screens/onboarding_screens.dart | 75 +++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/lib/screens/onboarding_screens.dart b/lib/screens/onboarding_screens.dart index 4f195ee4..351b27e6 100644 --- a/lib/screens/onboarding_screens.dart +++ b/lib/screens/onboarding_screens.dart @@ -16,37 +16,58 @@ class OnBoardingScreen extends StatefulWidget { } class OnBoardingScreenState extends State<OnBoardingScreen> { + var _pageInputUrlDone = false; + var _pageSshKeyDone = false; + var pageController = PageController(); final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(); @override Widget build(BuildContext context) { - var pageView = PageView( - controller: pageController, - children: <Widget>[ - OnBoardingGitUrl(doneFunction: (String sshUrl) { - pageController.nextPage( - duration: Duration(milliseconds: 200), - curve: Curves.easeIn, - ); + var pageCount = 1; + if (_pageInputUrlDone) { + pageCount++; + } + if (_pageSshKeyDone) { + pageCount++; + } - SharedPreferences.getInstance().then((SharedPreferences pref) { - pref.setString("sshCloneUrl", sshUrl); - }); - }), - OnBoardingSshKey( - doneFunction: () { + var pageView = PageView.builder( + controller: pageController, + itemBuilder: (BuildContext context, int pos) { + if (pos == 0) { + return OnBoardingGitUrl(doneFunction: (String sshUrl) { + setPageInputUrlDone(); pageController.nextPage( duration: Duration(milliseconds: 200), curve: Curves.easeIn, ); - }, - scaffoldKey: _scaffoldKey, - ), - OnBoardingGitClone( - doneFunction: this.widget.onBoardingCompletedFunction, - ), - ], + + SharedPreferences.getInstance().then((SharedPreferences pref) { + pref.setString("sshCloneUrl", sshUrl); + }); + }); + } + if (pos == 1) { + return OnBoardingSshKey( + doneFunction: () { + setPageSshKeyDone(); + pageController.nextPage( + duration: Duration(milliseconds: 200), + curve: Curves.easeIn, + ); + }, + scaffoldKey: _scaffoldKey, + ); + } + + if (pos == 2) { + return OnBoardingGitClone( + doneFunction: this.widget.onBoardingCompletedFunction, + ); + } + }, + itemCount: pageCount, ); return new Scaffold( @@ -59,6 +80,18 @@ class OnBoardingScreenState extends State<OnBoardingScreen> { ), ); } + + void setPageInputUrlDone() { + setState(() { + this._pageInputUrlDone = true; + }); + } + + void setPageSshKeyDone() { + setState(() { + this._pageSshKeyDone = true; + }); + } } class OnBoardingGitUrl extends StatefulWidget {