Re-implemented getting tasks with the new seperate endpoint #39

Open
konrad wants to merge 34 commits from feature/task-list into master
5 changed files with 77 additions and 36 deletions
Showing only changes of commit 7bd340f45c - Show all commits

View File

@ -1,12 +1,14 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:vikunja_app/components/AddDialog.dart';
import 'package:vikunja_app/components/TaskTile.dart';
import 'package:vikunja_app/global.dart';
import 'package:vikunja_app/models/list.dart';
import 'package:vikunja_app/models/task.dart';
import 'package:vikunja_app/pages/list/list_edit.dart';
import 'package:vikunja_app/stores/list_store.dart';
class ListPage extends StatefulWidget {
final TaskList taskList;
@ -21,23 +23,18 @@ class _ListPageState extends State<ListPage> {
TaskList _list;
List<Task> _tasks = [];
List<Task> _loadingTasks = [];
bool _loading = true;
int _currentPage = 1;
@override
void initState() {
_list = TaskList(id: widget.taskList.id, title: widget.taskList.title);
Future.microtask(() => _loadList());
super.initState();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
_loadList();
}
@override
Widget build(BuildContext context) {
final taskState = Provider.of<ListProvider>(context);
return Scaffold(
appBar: AppBar(
title: new Text(_list.title),
@ -52,9 +49,9 @@ class _ListPageState extends State<ListPage> {
))))
],
),
body: !this._loading
body: !taskState.isLoading
? RefreshIndicator(
child: _tasks.length > 0
child: taskState.tasks.length > 0
? ListView.builder(
padding: EdgeInsets.symmetric(vertical: 8.0),
itemBuilder: (context, i) {
@ -65,9 +62,9 @@ class _ListPageState extends State<ListPage> {
// This handles the case if there are no more elements in the list left which can be provided by the api
if (VikunjaGlobal.of(context).taskService.maxPages ==
_currentPage &&
index == _tasks.length - 1) return null;
index == taskState.tasks.length - 1) return null;
if (index >= _tasks.length &&
if (index >= taskState.tasks.length &&
_currentPage <
VikunjaGlobal.of(context)
.taskService
@ -75,9 +72,9 @@ class _ListPageState extends State<ListPage> {
_currentPage++;
_loadTasksForPage(_currentPage);
}
return index < _tasks.length
return index < taskState.tasks.length
? TaskTile(
task: _tasks[index],
task: taskState.tasks[index],
)
: null;
})

Please create a custom widget which handles auto loading new tasks and inserting dividers.

Please create a custom widget which handles auto loading new tasks and inserting dividers.
@ -92,29 +89,15 @@ class _ListPageState extends State<ListPage> {
}
Future<void> _loadList() {
return VikunjaGlobal.of(context)
.listService
.get(widget.taskList.id)
.then((list) {
setState(() {
_loading = true;
_list = list;
});
_loadTasksForPage(_currentPage);
});
_loadTasksForPage(1);
}
Future<void> _loadTasksForPage(int page) {
return VikunjaGlobal.of(context).taskService.getAll(_list.id, {
"sort_by": ["done", "id"],
"order_by": ["asc", "desc"],
"page": [page.toString()]
}).then((tasks) {
setState(() {
_loading = false;
_tasks.addAll(tasks);
});
});
void _loadTasksForPage(int page) {
Provider.of<ListProvider>(context, listen: false).loadTasks(
context: context,
listId: _list.id,
page: page,
);
}
_addItemDialog(BuildContext context) {
@ -127,6 +110,7 @@ class _ListPageState extends State<ListPage> {
}
_addItem(String name, BuildContext context) {
// FIXME: Use provider
konrad marked this conversation as resolved Outdated

resolve provider

resolve provider

Done.

Done.
var globalState = VikunjaGlobal.of(context);
var newTask = Task(
id: null, title: name, owner: globalState.currentUser, done: false);

View File

@ -3,12 +3,14 @@ import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:after_layout/after_layout.dart';
import 'package:provider/provider.dart';
import 'package:vikunja_app/components/AddDialog.dart';
import 'package:vikunja_app/global.dart';
import 'package:vikunja_app/models/list.dart';
import 'package:vikunja_app/models/namespace.dart';
import 'package:vikunja_app/pages/list/list.dart';
import 'package:vikunja_app/stores/list_store.dart';
class NamespacePage extends StatefulWidget {
final Namespace namespace;
@ -100,8 +102,14 @@ class _NamespacePageState extends State<NamespacePage>
}
_openList(BuildContext context, TaskList list) {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => ListPage(taskList: list)));
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => ChangeNotifierProvider<ListProvider>(
create: (_) => new ListProvider(),
child: ListPage(
taskList: list,
),
),
Review

Maybe init the provider in the ListPage? Make sure to use Builder as child when doing it.

Maybe init the provider in the ListPage? Make sure to use Builder as child when doing it.
Review

You mean in the build method of it?

You mean in the `build` method of it?
));
}
_addListDialog(BuildContext context) {

View File

@ -0,0 +1,33 @@
import 'package:flutter/material.dart';
import 'package:vikunja_app/models/task.dart';
import 'package:vikunja_app/global.dart';
class ListProvider with ChangeNotifier {
bool _isLoading = false;
// TODO: Streams
List<Task> _tasks = [];
bool get isLoading => _isLoading;
set tasks(List<Task> tasks) {
_tasks = tasks;
notifyListeners();
}
List<Task> get tasks => _tasks;
void loadTasks({BuildContext context, int listId, int page = 1}) {
_isLoading = true;
notifyListeners();
VikunjaGlobal.of(context).taskService.getAll(listId, {
"sort_by": ["done", "id"],
"order_by": ["asc", "desc"],
"page": [page.toString()]
}).then((tasks) {
_tasks.addAll(tasks);
_isLoading = false;
notifyListeners();
});
}
}

View File

@ -139,6 +139,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.8"
nested:
dependency: transitive
description:
name: nested
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4"
path:
dependency: transitive
description:
@ -160,6 +167,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
provider:
dependency: "direct main"
description:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.5+1"
quiver:
dependency: transitive
description:
@ -244,3 +258,4 @@ packages:
version: "2.2.0"
sdks:
dart: ">=2.4.0 <3.0.0"
flutter: ">=1.12.1"

View File

@ -13,6 +13,7 @@ dependencies:
flutter_secure_storage: 3.3.1+1
http: 0.12.0+3
after_layout: ^1.0.7
provider: ^4.0.5
dev_dependencies:
flutter_test: