From 4dab217c2747d8dc0729a6336babc708457983d5 Mon Sep 17 00:00:00 2001 From: konrad Date: Sat, 16 Mar 2019 17:18:27 +0100 Subject: [PATCH 1/4] Added namespace edit --- lib/pages/home.dart | 18 +++- lib/pages/namespace/namespace_edit.dart | 119 ++++++++++++++++++++++++ 2 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 lib/pages/namespace/namespace_edit.dart diff --git a/lib/pages/home.dart b/lib/pages/home.dart index 710d0c4..71f79bc 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:vikunja_app/components/AddDialog.dart'; import 'package:vikunja_app/components/GravatarImage.dart'; import 'package:vikunja_app/pages/namespace/namespace.dart'; +import 'package:vikunja_app/pages/namespace/namespace_edit.dart'; import 'package:vikunja_app/pages/placeholder.dart'; import 'package:vikunja_app/global.dart'; import 'package:vikunja_app/models/namespace.dart'; @@ -15,6 +16,7 @@ class HomePage extends StatefulWidget { class HomePageState extends State { List _namespaces = []; + Namespace get _currentNamespace => _selectedDrawerIndex >= 0 && _selectedDrawerIndex < _namespaces.length ? _namespaces[_selectedDrawerIndex] @@ -85,7 +87,21 @@ class HomePageState extends State { ))); return new Scaffold( - appBar: AppBar(title: new Text(_currentNamespace?.name ?? 'Vikunja')), + appBar: AppBar( + title: new Text(_currentNamespace?.name ?? 'Vikunja'), + actions: _currentNamespace == null + ? null + : [ + IconButton( + icon: Icon(Icons.edit), + onPressed: () => Navigator.push( + context, + MaterialPageRoute( + builder: (context) => NamespaceEditPage( + namespace: _currentNamespace, + )))) + ], + ), drawer: new Drawer( child: new Column(children: [ new UserAccountsDrawerHeader( diff --git a/lib/pages/namespace/namespace_edit.dart b/lib/pages/namespace/namespace_edit.dart new file mode 100644 index 0000000..4dd4789 --- /dev/null +++ b/lib/pages/namespace/namespace_edit.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; +import 'package:vikunja_app/global.dart'; +import 'package:vikunja_app/models/namespace.dart'; +import 'package:vikunja_app/theme/button.dart'; +import 'package:vikunja_app/theme/buttonText.dart'; + +class NamespaceEditPage extends StatefulWidget { + final Namespace namespace; + + NamespaceEditPage({this.namespace}) : super(key: Key(namespace.toString())); + + @override + State createState() => _NamespaceEditPageState(); +} + +class _NamespaceEditPageState extends State { + final _formKey = GlobalKey(); + bool _loading = false; + String _name, _description; + + @override + Widget build(BuildContext ctx) { + return Scaffold( + appBar: AppBar( + title: Text('Edit Namespace'), + ), + body: Builder( + builder: (BuildContext context) => SafeArea( + child: Form( + key: _formKey, + child: ListView( + padding: const EdgeInsets.all(16.0), + children: [ + Padding( + padding: EdgeInsets.symmetric(vertical: 10.0), + child: TextFormField( + maxLines: null, + keyboardType: TextInputType.multiline, + initialValue: widget.namespace.name, + onSaved: (name) => _name = name, + validator: (name) { + if (name.length < 3 || name.length > 250) { + return 'The name needs to have between 3 and 250 characters.'; + } + return null; + }, + decoration: new InputDecoration( + labelText: 'Name', + border: OutlineInputBorder(), + ), + ), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 10.0), + child: TextFormField( + maxLines: null, + keyboardType: TextInputType.multiline, + initialValue: widget.namespace.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(); + _saveNamespace(context); + } + } + : null, + child: _loading + ? CircularProgressIndicator() + : VikunjaButtonText('Save'), + ))), + ]), + ), + ), + ), + ); + } + + _saveNamespace(BuildContext context) async { + setState(() => _loading = true); + // FIXME: is there a way we can update the namespace without creating a new namespace object? + // aka updating the existing namespace we got from context (setters?) + Namespace updatedNamespace = + Namespace(id: widget.namespace.id, name: _name, description: _description); + + VikunjaGlobal.of(context).namespaceService.update(updatedNamespace).then((_) { + setState(() => _loading = false); + Scaffold.of(context).showSnackBar(SnackBar( + content: Text('The namespace was updated successfully!'), + )); + }).catchError((err) { + setState(() => _loading = false); + Scaffold.of(context).showSnackBar( + SnackBar( + content: Text('Something went wrong: ' + err.toString()), + action: SnackBarAction( + label: 'CLOSE', + onPressed: Scaffold.of(context).hideCurrentSnackBar), + ), + ); + }); + } +} -- 2.40.1 From a38ac76f97bb23145cc4b05e6a6f5745f0717972 Mon Sep 17 00:00:00 2001 From: konrad Date: Sat, 16 Mar 2019 17:18:47 +0100 Subject: [PATCH 2/4] format --- lib/pages/home.dart | 20 ++++++++++---------- lib/pages/namespace/namespace_edit.dart | 9 ++++++--- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lib/pages/home.dart b/lib/pages/home.dart index 71f79bc..ed658c9 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -91,16 +91,16 @@ class HomePageState extends State { title: new Text(_currentNamespace?.name ?? 'Vikunja'), actions: _currentNamespace == null ? null - : [ - IconButton( - icon: Icon(Icons.edit), - onPressed: () => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => NamespaceEditPage( - namespace: _currentNamespace, - )))) - ], + : [ + IconButton( + icon: Icon(Icons.edit), + onPressed: () => Navigator.push( + context, + MaterialPageRoute( + builder: (context) => NamespaceEditPage( + namespace: _currentNamespace, + )))) + ], ), drawer: new Drawer( child: new Column(children: [ diff --git a/lib/pages/namespace/namespace_edit.dart b/lib/pages/namespace/namespace_edit.dart index 4dd4789..3a7d453 100644 --- a/lib/pages/namespace/namespace_edit.dart +++ b/lib/pages/namespace/namespace_edit.dart @@ -96,10 +96,13 @@ class _NamespaceEditPageState extends State { setState(() => _loading = true); // FIXME: is there a way we can update the namespace without creating a new namespace object? // aka updating the existing namespace we got from context (setters?) - Namespace updatedNamespace = - Namespace(id: widget.namespace.id, name: _name, description: _description); + Namespace updatedNamespace = Namespace( + id: widget.namespace.id, name: _name, description: _description); - VikunjaGlobal.of(context).namespaceService.update(updatedNamespace).then((_) { + VikunjaGlobal.of(context) + .namespaceService + .update(updatedNamespace) + .then((_) { setState(() => _loading = false); Scaffold.of(context).showSnackBar(SnackBar( content: Text('The namespace was updated successfully!'), -- 2.40.1 From 7cc83ff4515f3676e84279514d916c0aebb009bf Mon Sep 17 00:00:00 2001 From: konrad Date: Sat, 16 Mar 2019 17:36:19 +0100 Subject: [PATCH 3/4] Fixed namespace not saving --- lib/pages/namespace/namespace_edit.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pages/namespace/namespace_edit.dart b/lib/pages/namespace/namespace_edit.dart index 3a7d453..36fbb94 100644 --- a/lib/pages/namespace/namespace_edit.dart +++ b/lib/pages/namespace/namespace_edit.dart @@ -97,7 +97,7 @@ class _NamespaceEditPageState extends State { // FIXME: is there a way we can update the namespace without creating a new namespace object? // aka updating the existing namespace we got from context (setters?) Namespace updatedNamespace = Namespace( - id: widget.namespace.id, name: _name, description: _description); + id: widget.namespace.id, name: _name, description: _description, owner: widget.namespace.owner); VikunjaGlobal.of(context) .namespaceService -- 2.40.1 From 6c70170c1ee75c9d6b6dab3012bee480512b9827 Mon Sep 17 00:00:00 2001 From: konrad Date: Sat, 16 Mar 2019 17:36:33 +0100 Subject: [PATCH 4/4] format --- lib/pages/namespace/namespace_edit.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/pages/namespace/namespace_edit.dart b/lib/pages/namespace/namespace_edit.dart index 36fbb94..d27cca1 100644 --- a/lib/pages/namespace/namespace_edit.dart +++ b/lib/pages/namespace/namespace_edit.dart @@ -97,7 +97,10 @@ class _NamespaceEditPageState extends State { // FIXME: is there a way we can update the namespace without creating a new namespace object? // aka updating the existing namespace we got from context (setters?) Namespace updatedNamespace = Namespace( - id: widget.namespace.id, name: _name, description: _description, owner: widget.namespace.owner); + id: widget.namespace.id, + name: _name, + description: _description, + owner: widget.namespace.owner); VikunjaGlobal.of(context) .namespaceService -- 2.40.1