From 05ce295fb45975ee17d50f59b4e47544e2e1e108 Mon Sep 17 00:00:00 2001 From: blallo Date: Wed, 21 Aug 2019 21:45:37 -0300 Subject: [PATCH] Improve server form. --- lib/ui/server_form.dart | 96 ++++++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 35 deletions(-) diff --git a/lib/ui/server_form.dart b/lib/ui/server_form.dart index e38d869..4d97d75 100644 --- a/lib/ui/server_form.dart +++ b/lib/ui/server_form.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'dart:convert'; import 'dialog.dart'; @@ -8,18 +9,22 @@ import '../utils/verify_server.dart'; final log = Logger(); class ServerForm extends StatefulWidget { - ServerForm({Key key}) : super(key: key); + ServerForm({@required this.defaultNextRoute, Key key}) : super(key: key); + final String title = "Server data"; + final String defaultNextRoute; @override _ServerFormState createState() => _ServerFormState(); } class _ServerFormState extends State { + static String title = "Server info"; Uri zAddress; Uri botZAddress; bool _autoValidate = false; bool _disableFields = false; final _serverFormKey = GlobalKey(); + final _scaffoldKey = GlobalKey(); final zController = TextEditingController(); final botZController = TextEditingController(); @@ -69,18 +74,30 @@ class _ServerFormState extends State { return null; } + Future getNextRoute() async { + var persistence = await SharedPreferences.getInstance(); + String nextRoute = persistence.getString("nextRoute"); + if (nextRoute != null) { + log.d("nextRoute: $nextRoute"); + return nextRoute; + } + log.d("defaultNextRoute: ${widget.defaultNextRoute}"); + return null; + } + Future _onPressed() async { log.d("Button pressed"); + var persistence = await SharedPreferences.getInstance(); setState(() { _disableFields = true; }); - Scaffold.of(context).showSnackBar(this.showProgress()); + _scaffoldKey.currentState.showSnackBar(this.showProgress()); if (!_serverFormKey.currentState.validate()) { setState(() { _autoValidate = true; _disableFields = false; }); - Scaffold.of(context).hideCurrentSnackBar(); + _scaffoldKey.currentState.hideCurrentSnackBar(); return; } @@ -101,7 +118,7 @@ class _ServerFormState extends State { setState(() { _disableFields = false; }); - Scaffold.of(context).hideCurrentSnackBar(); + _scaffoldKey.currentState.hideCurrentSnackBar(); } if (!resp) { @@ -111,43 +128,52 @@ class _ServerFormState extends State { "The BotZ server does not target the provided Z server.")); } else { _serverFormKey.currentState.save(); - // TODO: go to the next window. + persistence.setString("zAddress", this.zAddress.toString()); + persistence.setString("botZAddress", this.botZAddress.toString()); + String nextRoute = await getNextRoute(); + if (nextRoute == null) { + nextRoute = widget.defaultNextRoute; + } + Navigator.pushNamed(context, nextRoute); } log.d("Done"); } + Form theForm() => Form( + key: _serverFormKey, + child: Column(children: [ + TextFormField( + autofocus: true, + autocorrect: false, + controller: zController, + enabled: !_disableFields, + decoration: this._textFieldDecoration("Z server", Icons.http), + validator: this.validateZServer, + autovalidate: _autoValidate, + onSaved: (String addr) { + zAddress = Uri.parse(addr); + }), + TextFormField( + autocorrect: false, + controller: botZController, + enabled: !_disableFields, + decoration: this._textFieldDecoration("BotZ server", Icons.http), + validator: this.validateServer, + autovalidate: _autoValidate, + onSaved: (String addr) { + botZAddress = Uri.parse(addr); + }), + RaisedButton( + onPressed: _onPressed, + child: Text('Save'), + ), + ]), + ); + @override Widget build(BuildContext context) { - return Form( - key: _serverFormKey, - child: Column(children: [ - TextFormField( - autofocus: true, - autocorrect: false, - controller: zController, - enabled: !_disableFields, - decoration: this._textFieldDecoration("Z server", Icons.http), - validator: this.validateZServer, - autovalidate: _autoValidate, - onSaved: (String addr) { - zAddress = Uri.parse(addr); - }), - TextFormField( - autocorrect: false, - controller: botZController, - enabled: !_disableFields, - decoration: this._textFieldDecoration("BotZ server", Icons.http), - validator: this.validateServer, - autovalidate: _autoValidate, - onSaved: (String addr) { - botZAddress = Uri.parse(addr); - }), - RaisedButton( - onPressed: _onPressed, - child: Text('Save'), - ), - ]), - ); + return Scaffold( + key: _scaffoldKey, appBar: AppBar(title: Text(title)), body: theForm()); } }