List edit design improvements #27
|
@ -1,6 +1,8 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:vikunja_app/global.dart';
|
import 'package:vikunja_app/global.dart';
|
||||||
import 'package:vikunja_app/models/list.dart';
|
import 'package:vikunja_app/models/list.dart';
|
||||||
|
import 'package:vikunja_app/theme/button.dart';
|
||||||
|
import 'package:vikunja_app/theme/buttonText.dart';
|
||||||
|
|
||||||
class ListEditPage extends StatefulWidget {
|
class ListEditPage extends StatefulWidget {
|
||||||
final TaskList list;
|
final TaskList list;
|
||||||
|
@ -19,74 +21,78 @@ class _ListEditPageState extends State<ListEditPage> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext ctx) {
|
Widget build(BuildContext ctx) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text('Edit List'),
|
title: Text('Edit List'),
|
||||||
|
),
|
||||||
|
body: Builder(
|
||||||
|
builder: (BuildContext context) => SafeArea(
|
||||||
|
child: Form(
|
||||||
|
key: _formKey,
|
||||||
|
child: ListView(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
children: <Widget>[
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 10.0),
|
||||||
|
child: TextFormField(
|
||||||
|
maxLines: null,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
initialValue: widget.list.title,
|
||||||
|
onSaved: (title) => _title = title,
|
||||||
|
validator: (title) {
|
||||||
|
if (title.length < 3 || title.length > 250) {
|
||||||
|
return 'The title needs to have between 3 and 250 characters.';
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
decoration:
|
||||||
|
new InputDecoration(
|
||||||
|
labelText: 'Title',
|
||||||
|
border: OutlineInputBorder(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 10.0),
|
||||||
|
child: TextFormField(
|
||||||
|
maxLines: null,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
initialValue: widget.list.description,
|
||||||
|
onSaved: (description) => _description = description,
|
||||||
|
validator: (description) {
|
||||||
|
if (description.length > 1000) {
|
||||||
|
return 'The description can have a maximum of 1000 characters.';
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
decoration: new InputDecoration(
|
||||||
|
labelText: 'Description',
|
||||||
|
border: OutlineInputBorder(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Builder(
|
||||||
|
builder: (context) => Padding(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 10.0),
|
||||||
|
child: FancyButton(
|
||||||
|
onPressed: !_loading ? () {
|
||||||
|
if (_formKey.currentState.validate()) {
|
||||||
|
Form.of(context).save();
|
||||||
|
_saveList(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
child: _loading
|
||||||
|
? CircularProgressIndicator()
|
||||||
|
: VikunjaButtonText('Save'),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
]
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
body: Builder(
|
),
|
||||||
builder: (BuildContext context) => SafeArea(
|
);
|
||||||
child: Form(
|
|
||||||
key: _formKey,
|
|
||||||
child: ListView(
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
|
||||||
children: <Widget>[
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.symmetric(vertical: 10.0),
|
|
||||||
child: TextFormField(
|
|
||||||
maxLines: null,
|
|
||||||
keyboardType: TextInputType.multiline,
|
|
||||||
initialValue: widget.list.title,
|
|
||||||
onSaved: (title) => _title = title,
|
|
||||||
validator: (title) {
|
|
||||||
if (title.length < 3 || title.length > 250) {
|
|
||||||
return 'The title needs to have between 3 and 250 characters.';
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
decoration:
|
|
||||||
new InputDecoration(labelText: 'Title'),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.symmetric(vertical: 10.0),
|
|
||||||
child: TextFormField(
|
|
||||||
maxLines: null,
|
|
||||||
keyboardType: TextInputType.multiline,
|
|
||||||
initialValue: widget.list.description,
|
|
||||||
onSaved: (description) =>
|
|
||||||
_description = description,
|
|
||||||
validator: (description) {
|
|
||||||
if (description.length > 1000) {
|
|
||||||
return 'The description can have a maximum of 1000 characters.';
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
decoration: new InputDecoration(
|
|
||||||
labelText: 'Description'),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Builder(
|
|
||||||
builder: (context) => RaisedButton(
|
|
||||||
padding:
|
|
||||||
EdgeInsets.symmetric(vertical: 10.0),
|
|
||||||
onPressed: !_loading
|
|
||||||
? () {
|
|
||||||
if (_formKey.currentState
|
|
||||||
.validate()) {
|
|
||||||
Form.of(context)
|
|
||||||
.save(); // Why does this not work?
|
|
||||||
_saveList(context);
|
|
||||||
} else {
|
|
||||||
print(
|
|
||||||
"sdf"); // TODO: handle error
|
|
||||||
}
|
|
||||||
}
|
|
||||||
: null,
|
|
||||||
child: _loading
|
|
||||||
? CircularProgressIndicator()
|
|
||||||
: Text('Save'),
|
|
||||||
)),
|
|
||||||
])),
|
|
||||||
)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_saveList(BuildContext context) async {
|
_saveList(BuildContext context) async {
|
||||||
|
|
Reference in New Issue