diff --git a/lib/setup/key_editors.dart b/lib/setup/key_editors.dart index c7a59913..8b758ecc 100644 --- a/lib/setup/key_editors.dart +++ b/lib/setup/key_editors.dart @@ -1,53 +1,64 @@ import 'package:flutter/material.dart'; class PublicKeyEditor extends StatelessWidget { - final Function valueChanged; + final Key formKey; + final TextEditingController _controller; - PublicKeyEditor(this.valueChanged); + PublicKeyEditor(this.formKey, this._controller); @override Widget build(BuildContext context) { - return KeyEditor(valueChanged, _validator); + return KeyEditor(formKey, _controller, _validator); } String _validator(String val) { - if (!val.startsWith("ssh-")) { - return "Invalid Public Key"; + val = val.trim(); + if (!val.startsWith("ssh-rsa ")) { + return "Invalid Public Key - Doesn't start with ssh-rsa"; } - return ""; + return null; } } class PrivateKeyEditor extends StatelessWidget { - final Function valueChanged; + final Key formKey; + final TextEditingController _controller; - PrivateKeyEditor(this.valueChanged); + PrivateKeyEditor(this.formKey, this._controller); @override Widget build(BuildContext context) { - return KeyEditor(valueChanged, _validator); + return KeyEditor(formKey, _controller, _validator); } String _validator(String val) { - if (!val.startsWith("-----BEGIN RSA PRIVATE KEY-----")) { + val = val.trim(); + if (!val.startsWith("-----BEGIN ")) { return "Invalid Private Key"; } - if (!val.startsWith("-----END RSA PRIVATE KEY-----")) { + if (!val.endsWith("PRIVATE KEY-----")) { return "Invalid Private Key"; } - return ""; + + return null; } } class KeyEditor extends StatelessWidget { - final Function valueChanged; + final Key formKey; + final TextEditingController textEditingController; final Function validator; - KeyEditor(this.valueChanged, this.validator); + KeyEditor(this.formKey, this.textEditingController, this.validator) { + assert(formKey != null); + assert(textEditingController != null); + assert(validator != null); + } @override Widget build(BuildContext context) { var form = Form( + key: formKey, child: Builder(builder: (context) { return TextFormField( textAlign: TextAlign.left, @@ -55,13 +66,7 @@ class KeyEditor extends StatelessWidget { style: Theme.of(context).textTheme.body1, autovalidate: true, validator: validator, - onChanged: (String newVal) { - if (Form.of(context).validate()) { - valueChanged(newVal); - } else { - valueChanged(""); - } - }, + controller: textEditingController, ); }), autovalidate: true, diff --git a/lib/setup/sshkey.dart b/lib/setup/sshkey.dart index 706a8bcc..a6114b91 100644 --- a/lib/setup/sshkey.dart +++ b/lib/setup/sshkey.dart @@ -207,14 +207,23 @@ class GitHostUserProvidedKeys extends StatefulWidget { } class _GitHostUserProvidedKeysState extends State { - String publicKey = ""; - String privateKey = ""; - final _publicKeyController = TextEditingController(); - final _privateKeyController = TextEditingController(); + GlobalKey _publicFormKey; + GlobalKey _privateFormKey; + TextEditingController _publicKeyController; + TextEditingController _privateKeyController; + + @override + void initState() { + super.initState(); + + _publicFormKey = GlobalKey(); + _privateFormKey = GlobalKey(); + _publicKeyController = TextEditingController(); + _privateKeyController = TextEditingController(); + } @override Widget build(BuildContext context) { - var nextEnabled = publicKey.isNotEmpty && privateKey.isNotEmpty; return Container( child: Column( children: [ @@ -223,32 +232,35 @@ class _GitHostUserProvidedKeysState extends State { style: Theme.of(context).textTheme.headline, ), const SizedBox(height: 8.0), - PublicKeyEditor((String newVal) { - setState(() { - publicKey = newVal; - }); - }), + PublicKeyEditor(_publicFormKey, _publicKeyController), const SizedBox(height: 8.0), Text( "Private Key -", style: Theme.of(context).textTheme.headline, ), const SizedBox(height: 8.0), - PrivateKeyEditor((String newVal) { - setState(() { - privateKey = newVal; - }); - }), + PrivateKeyEditor(_privateFormKey, _privateKeyController), const SizedBox(height: 16.0), GitHostSetupButton( text: "Next", onPressed: () { - if (!nextEnabled) { + var publicValid = _publicFormKey.currentState.validate(); + var privateValid = _privateFormKey.currentState.validate(); + + if (!publicValid || !privateValid) { return; } var publicKey = _publicKeyController.text.trim(); + if (!publicKey.endsWith('\n')) { + publicKey += '\n'; + } + var privateKey = _privateKeyController.text.trim(); + if (!privateKey.endsWith('\n')) { + privateKey += '\n'; + } + widget.doneFunction(publicKey, privateKey); }, ),