diff --git a/lib/api/task_implementation.dart b/lib/api/task_implementation.dart index 1d85b1d..ead2d65 100644 --- a/lib/api/task_implementation.dart +++ b/lib/api/task_implementation.dart @@ -26,4 +26,10 @@ class TaskAPIService extends APIService implements TaskService { .post('/tasks/${task.id}', body: task.toJSON()) .then((map) => Task.fromJson(map)); } + + @override + Future> getAll(int listId) { + return client.get('/lists/$listId/tasks').then( + (list) => convertList(list, (result) => Task.fromJson(result))); + } } diff --git a/lib/models/list.dart b/lib/models/list.dart index cf9a5ad..accccd8 100644 --- a/lib/models/list.dart +++ b/lib/models/list.dart @@ -1,5 +1,4 @@ import 'package:meta/meta.dart'; -import 'package:vikunja_app/models/task.dart'; import 'package:vikunja_app/models/user.dart'; class TaskList { @@ -7,7 +6,6 @@ class TaskList { final String title, description; final User owner; final DateTime created, updated; - final List tasks; TaskList( {@required this.id, @@ -15,8 +13,7 @@ class TaskList { this.description, this.owner, this.created, - this.updated, - this.tasks}); + this.updated}); TaskList.fromJson(Map json) : id = json['id'], @@ -24,10 +21,7 @@ class TaskList { description = json['description'], title = json['title'], updated = DateTime.fromMillisecondsSinceEpoch(json['updated']), - created = DateTime.fromMillisecondsSinceEpoch(json['created']), - tasks = (json['tasks'] == null ? [] : json['tasks'] as List) - ?.map((taskJson) => Task.fromJson(taskJson)) - ?.toList(); + created = DateTime.fromMillisecondsSinceEpoch(json['created']); toJSON() { return { diff --git a/lib/pages/list/list.dart b/lib/pages/list/list.dart index f963a2a..3fce729 100644 --- a/lib/pages/list/list.dart +++ b/lib/pages/list/list.dart @@ -19,13 +19,14 @@ class ListPage extends StatefulWidget { class _ListPageState extends State { TaskList _list; + List _tasks = []; List _loadingTasks = []; bool _loading = true; @override void initState() { _list = TaskList( - id: widget.taskList.id, title: widget.taskList.title, tasks: []); + id: widget.taskList.id, title: widget.taskList.title); super.initState(); } @@ -53,7 +54,7 @@ class _ListPageState extends State { ), body: !this._loading ? RefreshIndicator( - child: _list.tasks.length > 0 + child: _tasks.length > 0 ? ListView( padding: EdgeInsets.symmetric(vertical: 8.0), children: ListTile.divideTiles( @@ -71,7 +72,7 @@ class _ListPageState extends State { } List _listTasks() { - var tasks = (_list?.tasks?.map(_buildTile) ?? []).toList(); + var tasks = (_tasks?.map(_buildTile) ?? []).toList(); tasks.addAll(_loadingTasks.map(_buildLoadingTile)); return tasks; } @@ -95,6 +96,15 @@ class _ListPageState extends State { setState(() { _loading = false; _list = list; + // Load tasks + VikunjaGlobal.of(context) + .taskService + .getAll(list.id) + .then((tasks) { + setState(() { + _tasks = tasks; + }); + }); }); }); } @@ -115,7 +125,7 @@ class _ListPageState extends State { setState(() => _loadingTasks.add(newTask)); globalState.taskService.add(_list.id, newTask).then((task) { setState(() { - _list.tasks.add(task); + _tasks.add(task); }); }).then((_) { _loadList(); diff --git a/lib/pages/namespace/namespace.dart b/lib/pages/namespace/namespace.dart index 07f6f87..612c074 100644 --- a/lib/pages/namespace/namespace.dart +++ b/lib/pages/namespace/namespace.dart @@ -116,7 +116,7 @@ class _NamespacePageState extends State _addList(String name, BuildContext context) { VikunjaGlobal.of(context) .listService - .create(widget.namespace.id, TaskList(id: null, title: name, tasks: [])) + .create(widget.namespace.id, TaskList(id: null, title: name)) .then((_) { setState(() {}); _loadLists(); diff --git a/lib/service/mocked_services.dart b/lib/service/mocked_services.dart index 98913e1..dda39f3 100644 --- a/lib/service/mocked_services.dart +++ b/lib/service/mocked_services.dart @@ -28,7 +28,6 @@ var _lists = { 1: TaskList( id: 1, title: 'List 1', - tasks: _tasks.values.toList(), owner: _users[1], description: 'A nice list', created: DateTime.now(), @@ -120,20 +119,13 @@ class MockedListService implements ListService { class MockedTaskService implements TaskService { @override Future delete(int taskId) { - _lists.forEach( - (_, list) => list.tasks.removeWhere((task) => task.id == taskId)); _tasks.remove(taskId); return Future.value(); } @override Future update(Task task) { - _lists.forEach((_, list) { - if (list.tasks.where((t) => t.id == task.id).length > 0) { - list.tasks.removeWhere((t) => t.id == task.id); - list.tasks.add(task); - } - }); + _tasks[task.id] = task; return Future.value(_tasks[task.id] = task); } @@ -141,9 +133,13 @@ class MockedTaskService implements TaskService { Future add(int listId, Task task) { var id = _tasks.keys.last + 1; _tasks[id] = task; - _lists[listId].tasks.add(task); return Future.value(task); } + + @override + Future> getAll(int listId) { + return Future.value(_tasks.values.toList()); + } } class MockedUserService implements UserService { diff --git a/lib/service/services.dart b/lib/service/services.dart index 54f8c51..750b2ed 100644 --- a/lib/service/services.dart +++ b/lib/service/services.dart @@ -26,6 +26,7 @@ abstract class TaskService { Future update(Task task); Future delete(int taskId); Future add(int listId, Task task); + Future> getAll(int listId); } abstract class UserService {