Re-implemented getting tasks with the new seperate endpoint #39
|
@ -26,4 +26,10 @@ class TaskAPIService extends APIService implements TaskService {
|
|||
.post('/tasks/${task.id}', body: task.toJSON())
|
||||
.then((map) => Task.fromJson(map));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<Task>> getAll(int listId) {
|
||||
return client.get('/lists/$listId/tasks').then(
|
||||
(list) => convertList(list, (result) => Task.fromJson(result)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Task> 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<String, dynamic> 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<dynamic>)
|
||||
?.map((taskJson) => Task.fromJson(taskJson))
|
||||
?.toList();
|
||||
created = DateTime.fromMillisecondsSinceEpoch(json['created']);
|
||||
|
||||
toJSON() {
|
||||
return {
|
||||
|
|
|
@ -19,13 +19,14 @@ class ListPage extends StatefulWidget {
|
|||
|
||||
class _ListPageState extends State<ListPage> {
|
||||
TaskList _list;
|
||||
List<Task> _tasks = [];
|
||||
List<Task> _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<ListPage> {
|
|||
),
|
||||
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<ListPage> {
|
|||
}
|
||||
|
||||
List<Widget> _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<ListPage> {
|
|||
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<ListPage> {
|
|||
setState(() => _loadingTasks.add(newTask));
|
||||
globalState.taskService.add(_list.id, newTask).then((task) {
|
||||
setState(() {
|
||||
_list.tasks.add(task);
|
||||
_tasks.add(task);
|
||||
});
|
||||
}).then((_) {
|
||||
_loadList();
|
||||
|
|
|
@ -116,7 +116,7 @@ class _NamespacePageState extends State<NamespacePage>
|
|||
_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();
|
||||
|
|
|
@ -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<Task> 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<Task> 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<List<Task>> getAll(int listId) {
|
||||
return Future.value(_tasks.values.toList());
|
||||
}
|
||||
}
|
||||
|
||||
class MockedUserService implements UserService {
|
||||
|
|
|
@ -26,6 +26,7 @@ abstract class TaskService {
|
|||
Future<Task> update(Task task);
|
||||
Future delete(int taskId);
|
||||
Future<Task> add(int listId, Task task);
|
||||
Future<List<Task>> getAll(int listId);
|
||||
}
|
||||
|
||||
abstract class UserService {
|
||||
|
|
Reference in New Issue