Improve server form.
This commit is contained in:
parent
4e7bec0f93
commit
05ce295fb4
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user