Fixed namespaces loading every time a widget was loaded #34
|
@ -103,10 +103,10 @@ class HomePageState extends State<HomePage> with AfterLayoutMixin<HomePage> {
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (_) => AddDialog(
|
||||
onAdd: (name) => _addNamespace(name, context),
|
||||
decoration: new InputDecoration(
|
||||
labelText: 'Namespace', hintText: 'eg. Personal Namespace'),
|
||||
));
|
||||
onAdd: (name) => _addNamespace(name, context),
|
||||
decoration: new InputDecoration(
|
||||
labelText: 'Namespace', hintText: 'eg. Personal Namespace'),
|
||||
));
|
||||
}
|
||||
|
||||
_addNamespace(String name, BuildContext context) {
|
||||
|
|
|
@ -19,7 +19,8 @@ class NamespacePage extends StatefulWidget {
|
|||
_NamespacePageState createState() => new _NamespacePageState();
|
||||
}
|
||||
|
||||
class _NamespacePageState extends State<NamespacePage> with AfterLayoutMixin<NamespacePage> {
|
||||
class _NamespacePageState extends State<NamespacePage>
|
||||
with AfterLayoutMixin<NamespacePage> {
|
||||
List<TaskList> _lists = [];
|
||||
bool _loading = true;
|
||||
|
||||
|
@ -35,62 +36,56 @@ class _NamespacePageState extends State<NamespacePage> with AfterLayoutMixin<Nam
|
|||
return Scaffold(
|
||||
body: !this._loading
|
||||
? RefreshIndicator(
|
||||
child: new ListView(
|
||||
padding: EdgeInsets.symmetric(vertical: 8.0),
|
||||
children: ListTile.divideTiles(
|
||||
context: context,
|
||||
tiles: _lists.map((ls) =>
|
||||
Dismissible(
|
||||
key: Key(ls.id.toString()),
|
||||
direction: DismissDirection.startToEnd,
|
||||
child: ListTile(
|
||||
title: new Text(ls.title),
|
||||
onTap: () => _openList(context, ls),
|
||||
trailing: Icon(Icons.arrow_right),
|
||||
),
|
||||
background: Container(
|
||||
color: Colors.red,
|
||||
child: const ListTile(
|
||||
leading: Icon(Icons.delete,
|
||||
color: Colors.white, size: 36.0)),
|
||||
),
|
||||
onDismissed: (direction) {
|
||||
_removeList(ls).then((_) =>
|
||||
Scaffold.of(context)
|
||||
.showSnackBar(SnackBar(
|
||||
content: Text("${ls.title} removed"))));
|
||||
},
|
||||
))).toList(),
|
||||
),
|
||||
onRefresh: _loadLists,
|
||||
)
|
||||
child: new ListView(
|
||||
padding: EdgeInsets.symmetric(vertical: 8.0),
|
||||
children: ListTile.divideTiles(
|
||||
context: context,
|
||||
tiles: _lists.map((ls) => Dismissible(
|
||||
key: Key(ls.id.toString()),
|
||||
direction: DismissDirection.startToEnd,
|
||||
child: ListTile(
|
||||
title: new Text(ls.title),
|
||||
onTap: () => _openList(context, ls),
|
||||
trailing: Icon(Icons.arrow_right),
|
||||
),
|
||||
background: Container(
|
||||
color: Colors.red,
|
||||
child: const ListTile(
|
||||
leading: Icon(Icons.delete,
|
||||
color: Colors.white, size: 36.0)),
|
||||
),
|
||||
onDismissed: (direction) {
|
||||
_removeList(ls).then((_) => Scaffold.of(context)
|
||||
.showSnackBar(SnackBar(
|
||||
content: Text("${ls.title} removed"))));
|
||||
},
|
||||
))).toList(),
|
||||
),
|
||||
onRefresh: _loadLists,
|
||||
)
|
||||
: Center(child: CircularProgressIndicator()),
|
||||
floatingActionButton: Builder(
|
||||
builder: (context) =>
|
||||
FloatingActionButton(
|
||||
onPressed: () => _addListDialog(context),
|
||||
child: const Icon(Icons.add))),
|
||||
builder: (context) => FloatingActionButton(
|
||||
onPressed: () => _addListDialog(context),
|
||||
child: const Icon(Icons.add))),
|
||||
);
|
||||
}
|
||||
|
||||
Future _removeList(TaskList list) {
|
||||
return VikunjaGlobal
|
||||
.of(context)
|
||||
return VikunjaGlobal.of(context)
|
||||
.listService
|
||||
.delete(list.id)
|
||||
.then((_) => _loadLists());
|
||||
}
|
||||
|
||||
Future<void> _loadLists() {
|
||||
return VikunjaGlobal
|
||||
.of(context)
|
||||
return VikunjaGlobal.of(context)
|
||||
.listService
|
||||
.getByNamespace(widget.namespace.id)
|
||||
.then((lists) =>
|
||||
setState(() {
|
||||
this._lists = lists;
|
||||
this._loading = false;
|
||||
}));
|
||||
.then((lists) => setState(() {
|
||||
this._lists = lists;
|
||||
this._loading = false;
|
||||
}));
|
||||
}
|
||||
|
||||
_openList(BuildContext context, TaskList list) {
|
||||
|
@ -101,17 +96,15 @@ class _NamespacePageState extends State<NamespacePage> with AfterLayoutMixin<Nam
|
|||
_addListDialog(BuildContext context) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (_) =>
|
||||
AddDialog(
|
||||
onAdd: (name) => _addList(name, context),
|
||||
decoration: new InputDecoration(
|
||||
labelText: 'List Name', hintText: 'eg. Shopping List')),
|
||||
builder: (_) => AddDialog(
|
||||
onAdd: (name) => _addList(name, context),
|
||||
decoration: new InputDecoration(
|
||||
labelText: 'List Name', hintText: 'eg. Shopping List')),
|
||||
);
|
||||
}
|
||||
|
||||
_addList(String name, BuildContext context) {
|
||||
VikunjaGlobal
|
||||
.of(context)
|
||||
VikunjaGlobal.of(context)
|
||||
.listService
|
||||
.create(widget.namespace.id, TaskList(id: null, title: name, tasks: []))
|
||||
.then((_) {
|
||||
|
|
Reference in New Issue
Block a user