Improve server form.

This commit is contained in:
sfigato 2019-08-21 21:45:37 -03:00
parent 4e7bec0f93
commit 05ce295fb4
Signed by: blallo
GPG Key ID: 0CBE577C9B72DC3F

View File

@ -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<ServerForm> {
static String title = "Server info";
Uri zAddress;
Uri botZAddress;
bool _autoValidate = false;
bool _disableFields = false;
final _serverFormKey = GlobalKey<FormState>();
final _scaffoldKey = GlobalKey<ScaffoldState>();
final zController = TextEditingController();
final botZController = TextEditingController();
@ -69,18 +74,30 @@ class _ServerFormState extends State<ServerForm> {
return null;
}
Future<String> 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<void> _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<ServerForm> {
setState(() {
_disableFields = false;
});
Scaffold.of(context).hideCurrentSnackBar();
_scaffoldKey.currentState.hideCurrentSnackBar();
}
if (!resp) {
@ -111,43 +128,52 @@ class _ServerFormState extends State<ServerForm> {
"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: <Widget>[
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: <Widget>[
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());
}
}