GitHostSetup: Lots of fixing

The flow between all the wizards is now complex enough that having it
all in one class is becoming quite complex. I've eventually managed to
get all the workflows to work, but there is a decent amount of code
duplication.

This really needs to be simplified.
This commit is contained in:
Vishesh Handa
2019-01-25 15:50:26 +01:00
parent d6515bf507
commit ed092da3c7

View File

@ -51,10 +51,13 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
Widget build(BuildContext context) {
var pageCount = 1;
if (_pageInitalScreenDone) {
pageCount++;
pageCount = 2;
}
if (_pageCreateNewRepoDone) {
pageCount++;
pageCount = 3;
}
if (_autoConfigureDone) {
pageCount = 4;
}
if (_pageInputUrlDone) {
pageCount++;
@ -62,9 +65,11 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
if (_pageSshKeyDone) {
pageCount++;
}
if (_autoConfigureStarted) {
pageCount++;
}
print("_pageInitalScreenDone: " + _pageInitalScreenDone.toString());
print("_pageCreateNewRepoDone: " + _pageCreateNewRepoDone.toString());
print("_autoConfigureDone: " + _autoConfigureDone.toString());
print("_pageInputUrlDone: " + _pageInputUrlDone.toString());
print("_pageSshKeyDone: " + _pageSshKeyDone.toString());
var pageView = PageView.builder(
controller: pageController,
@ -76,6 +81,10 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
_createNewRepo = true;
_pageInitalScreenDone = true;
_autoConfigureStarted = false;
_autoConfigureDone = false;
_pageSshKeyDone = false;
pageController.nextPage(
duration: Duration(milliseconds: 200),
curve: Curves.easeIn,
@ -87,28 +96,9 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
_createNewRepo = false;
_pageInitalScreenDone = true;
pageController.nextPage(
duration: Duration(milliseconds: 200),
curve: Curves.easeIn,
);
});
},
);
}
if (pos == 1 && _createNewRepo) {
return GitHostSetupCreateRepo(
onDone: (GitHostType gitHostType, bool autoConfigure) {
if (!autoConfigure) {
_launchCreateRepoPage(gitHostType);
}
setState(() {
_createNewRepo = true;
_pageCreateNewRepoDone = true;
_autoConfigureStarted = autoConfigure;
_autoConfigureStarted = false;
_autoConfigureDone = false;
_gitHostType = gitHostType;
_pageSshKeyDone = false;
pageController.nextPage(
duration: Duration(milliseconds: 200),
@ -119,31 +109,101 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
);
}
if (pos == 2 && _createNewRepo && _autoConfigureStarted) {
return GitHostSetupAutoConfigure(
gitHostType: _gitHostType,
onDone: (String gitCloneUrl) {
setState(() {
_gitCloneUrl = gitCloneUrl;
_autoConfigureDone = true;
if (_createNewRepo) {
if (pos == 1) {
return GitHostSetupCreateRepo(
onDone: (GitHostType gitHostType, bool autoConfigure) {
if (!autoConfigure) {
_launchCreateRepoPage(gitHostType);
}
setState(() {
_createNewRepo = true;
_pageCreateNewRepoDone = true;
_autoConfigureStarted = autoConfigure;
_autoConfigureDone = false;
_gitHostType = gitHostType;
pageController.nextPage(
duration: Duration(milliseconds: 200),
curve: Curves.easeIn,
);
});
},
);
}
if (_autoConfigureStarted) {
if (pos == 2) {
return GitHostSetupAutoConfigure(
gitHostType: _gitHostType,
onDone: (String gitCloneUrl) {
setState(() {
_gitCloneUrl = gitCloneUrl;
_autoConfigureDone = true;
pageController.nextPage(
duration: Duration(milliseconds: 200),
curve: Curves.easeIn,
);
var appState = StateContainer.of(context).appState;
_startGitClone(context, appState.gitBaseDirectory);
});
},
);
}
if (pos == 3 && _autoConfigureDone) {
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
}
} else {
if (pos == 2) {
return GitHostSetupUrl(doneFunction: (String sshUrl) {
setPageInputUrlDone();
pageController.nextPage(
duration: Duration(milliseconds: 200),
curve: Curves.easeIn,
);
var appState = StateContainer.of(context).appState;
_startGitClone(context, appState.gitBaseDirectory);
// We aren't calling setState as this isn't being used for rendering
_gitCloneUrl = sshUrl.trim();
this._generateSshKey();
});
},
);
}
}
if (pos == 3 && _createNewRepo && _autoConfigureDone) {
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
}
if (pos == 3) {
return GitHostSetupSshKey(
doneFunction: () {
setPageSshKeyDone();
pageController.nextPage(
duration: Duration(milliseconds: 200),
curve: Curves.easeIn,
);
if ((pos == 2 && _createNewRepo) || pos == 1) {
var appState = StateContainer.of(context).appState;
_startGitClone(context, appState.gitBaseDirectory);
getAnalytics().logEvent(
name: "onboarding_public_key_copied",
parameters: <String, dynamic>{},
);
},
publicKey: publicKey,
copyKeyFunction: _copyKeyToClipboard,
openDeployKeyPage: _launchDeployKeyPage,
canOpenDeployKeyPage: _canLaunchDeployKeyPage,
);
}
if (pos == 4) {
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
}
}
} // create new repo
if (pos == 1) {
return GitHostSetupUrl(doneFunction: (String sshUrl) {
setPageInputUrlDone();
pageController.nextPage(
@ -162,7 +222,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
);
});
}
if ((pos == 3 && _createNewRepo) || pos == 2) {
if (pos == 2) {
return GitHostSetupSshKey(
doneFunction: () {
setPageSshKeyDone();
@ -186,7 +246,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
);
}
if ((pos == 4 && _createNewRepo) || pos == 3) {
if (pos == 3) {
return GitHostSetupGitClone(errorMessage: gitCloneErrorMessage);
}
},
@ -379,8 +439,6 @@ class GitHostSetupInitialChoice extends StatelessWidget {
@override
Widget build(BuildContext context) {
FocusScope.of(context).requestFocus(new FocusNode());
var headerTextStyle =
Theme.of(context).textTheme.display3.copyWith(fontFamily: "Lato");
var header = Column(
@ -427,16 +485,22 @@ class GitHostSetupInitialChoice extends StatelessWidget {
}
}
class GitHostSetupCreateRepo extends StatelessWidget {
class GitHostSetupCreateRepo extends StatefulWidget {
final Function onDone;
final _configureKey = new GlobalKey();
GitHostSetupCreateRepo({@required this.onDone});
@override
Widget build(BuildContext context) {
FocusScope.of(context).requestFocus(new FocusNode());
GitHostSetupCreateRepoState createState() {
return new GitHostSetupCreateRepoState();
}
}
class GitHostSetupCreateRepoState extends State<GitHostSetupCreateRepo> {
bool switchValue = true;
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
@ -449,8 +513,8 @@ class GitHostSetupCreateRepo extends StatelessWidget {
text: "GitHub",
iconUrl: 'assets/icon/github-icon.png',
onPressed: () {
var switchWidget = _configureKey.currentWidget as Switch;
onDone(GitHostType.GitHub, switchWidget.value);
print("SwitchValue: " + switchValue.toString());
widget.onDone(GitHostType.GitHub, switchValue);
},
),
SizedBox(height: 8.0),
@ -458,17 +522,20 @@ class GitHostSetupCreateRepo extends StatelessWidget {
text: "GitLab",
iconUrl: 'assets/icon/gitlab-icon.png',
onPressed: () async {
var switchWidget = _configureKey.currentWidget as Switch;
onDone(GitHostType.GitLab, switchWidget.value);
widget.onDone(GitHostType.GitLab, switchValue);
},
),
SizedBox(height: 8.0),
Row(
children: <Widget>[
Switch(
key: _configureKey,
value: true,
onChanged: (bool value) {},
value: switchValue,
onChanged: (bool value) {
setState(() {
print("Changing switchValue " + value.toString());
switchValue = value;
});
},
),
Text(
"Auto Configure",
@ -504,8 +571,6 @@ class GitHostSetupSshKey extends StatelessWidget {
@override
Widget build(BuildContext context) {
FocusScope.of(context).requestFocus(new FocusNode());
Widget copyAndDepoyWidget;
Widget cloneButton;
if (this.publicKey.isEmpty) {