diff --git a/lib/main.dart b/lib/main.dart index 58663f1..3d109cd 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -68,57 +68,57 @@ class _MyHomePageState extends State { String _output = ''; String key = ''; - Future _incrementCounter() async { - if (navIndex == 0) { - SSHSocket? socket; + Future doSSH() async { + SSHSocket? socket; - try { - socket = await SSHSocket.connect( - '192.168.2.123', - 22, - timeout: const Duration(seconds: 0, milliseconds: 500), - ); - } on SocketException { - setState(() { - _output = "SocketException: Could not connect to the server."; - }); - return; - } - - try { - final client = SSHClient( - socket, - username: 'test', - //onPasswordRequest: () => '123456', - identities: List.of(keyPair != null ? [keyPair!] : []), - ); - - final uptime = await client.run('uptime'); - setState(() { - _output = utf8.decode(uptime); - }); - } catch (e) { - setState(() { - _output = "Error: $e"; - }); - return; - } - } else { - // Generate a key pair - - final generatedKeyPair = - await generateKeyPair(); // local variable avoids downcast to ? ptr - keyPair = generatedKeyPair; - - setState(() { - key = encodePublicKey(generatedKeyPair, comment: "leinelab-app-key"); - }); - - await SystemChannels.platform.invokeMethod( - 'Clipboard.setData', - {'text': key}, + try { + socket = await SSHSocket.connect( + '192.168.2.123', + 22, + timeout: const Duration(seconds: 0, milliseconds: 500), ); + } on SocketException { + setState(() { + _output = "SocketException: Could not connect to the server."; + }); + return; } + + try { + final client = SSHClient( + socket, + username: 'test', + //onPasswordRequest: () => '123456', + identities: List.of(keyPair != null ? [keyPair!] : []), + ); + + final uptime = await client.run('uptime'); + setState(() { + _output = utf8.decode(uptime); + }); + } catch (e) { + setState(() { + _output = "Error: $e"; + }); + return; + } + } + + Future generateKey() async { + // Generate a key pair + + final generatedKeyPair = + await generateKeyPair(); // local variable avoids downcast to ? ptr + keyPair = generatedKeyPair; + + setState(() { + key = encodePublicKey(generatedKeyPair, comment: "leinelab-app-key"); + }); + + await SystemChannels.platform.invokeMethod( + 'Clipboard.setData', + {'text': key}, + ); } @override @@ -144,14 +144,29 @@ class _MyHomePageState extends State { ), ); + final actionButtonMain = FloatingActionButton( + onPressed: doSSH, + tooltip: 'Do SSH', + child: const Icon(Icons.computer), + ); + + final actionButtonInfo = FloatingActionButton( + onPressed: generateKey, + tooltip: 'Regenerate Key', + child: const Icon(Icons.refresh), + ); + var bodyComponent = bodyComponentMain; + var actionButton = actionButtonMain; if (navIndex == 0) { // Main page bodyComponent = bodyComponentMain; + actionButton = actionButtonMain; } else if (navIndex == 1) { // Info page bodyComponent = bodyComponentInfo; + actionButton = actionButtonInfo; } else { throw Exception('Unknown navIndex: $navIndex'); } @@ -159,11 +174,7 @@ class _MyHomePageState extends State { return Scaffold( appBar: AppBar(backgroundColor: Colors.amber, title: Text(widget.title)), body: bodyComponent, - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), + floatingActionButton: actionButton, drawer: Drawer( child: ListView( padding: EdgeInsets.zero,