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:flutter/material.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert'; import 'dart:convert';
import 'dialog.dart'; import 'dialog.dart';
@ -8,18 +9,22 @@ import '../utils/verify_server.dart';
final log = Logger(); final log = Logger();
class ServerForm extends StatefulWidget { 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 @override
_ServerFormState createState() => _ServerFormState(); _ServerFormState createState() => _ServerFormState();
} }
class _ServerFormState extends State<ServerForm> { class _ServerFormState extends State<ServerForm> {
static String title = "Server info";
Uri zAddress; Uri zAddress;
Uri botZAddress; Uri botZAddress;
bool _autoValidate = false; bool _autoValidate = false;
bool _disableFields = false; bool _disableFields = false;
final _serverFormKey = GlobalKey<FormState>(); final _serverFormKey = GlobalKey<FormState>();
final _scaffoldKey = GlobalKey<ScaffoldState>();
final zController = TextEditingController(); final zController = TextEditingController();
final botZController = TextEditingController(); final botZController = TextEditingController();
@ -69,18 +74,30 @@ class _ServerFormState extends State<ServerForm> {
return null; 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 { Future<void> _onPressed() async {
log.d("Button pressed"); log.d("Button pressed");
var persistence = await SharedPreferences.getInstance();
setState(() { setState(() {
_disableFields = true; _disableFields = true;
}); });
Scaffold.of(context).showSnackBar(this.showProgress()); _scaffoldKey.currentState.showSnackBar(this.showProgress());
if (!_serverFormKey.currentState.validate()) { if (!_serverFormKey.currentState.validate()) {
setState(() { setState(() {
_autoValidate = true; _autoValidate = true;
_disableFields = false; _disableFields = false;
}); });
Scaffold.of(context).hideCurrentSnackBar(); _scaffoldKey.currentState.hideCurrentSnackBar();
return; return;
} }
@ -101,7 +118,7 @@ class _ServerFormState extends State<ServerForm> {
setState(() { setState(() {
_disableFields = false; _disableFields = false;
}); });
Scaffold.of(context).hideCurrentSnackBar(); _scaffoldKey.currentState.hideCurrentSnackBar();
} }
if (!resp) { if (!resp) {
@ -111,43 +128,52 @@ class _ServerFormState extends State<ServerForm> {
"The BotZ server does not target the provided Z server.")); "The BotZ server does not target the provided Z server."));
} else { } else {
_serverFormKey.currentState.save(); _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"); 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Form( return Scaffold(
key: _serverFormKey, key: _scaffoldKey, appBar: AppBar(title: Text(title)), body: theForm());
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'),
),
]),
);
} }
} }