Start using providers
continuous-integration/drone/pr Build is passing
Details
continuous-integration/drone/pr Build is passing
Details
This commit is contained in:
parent
bc8188f44c
commit
7bd340f45c
|
@ -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;
|
||||
})
|
||||
|
@ -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
|
||||
var globalState = VikunjaGlobal.of(context);
|
||||
var newTask = Task(
|
||||
id: null, title: name, owner: globalState.currentUser, done: false);
|
||||
|
|
|
@ -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,
|
||||
),
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
_addListDialog(BuildContext context) {
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
}
|
15
pubspec.lock
15
pubspec.lock
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
Reference in New Issue