1
0
mirror of https://github.com/go-vikunja/app synced 2024-06-02 18:49:47 +00:00

moved pageStatus for list to listprovider

This commit is contained in:
Benimautner 2023-01-06 23:29:45 +01:00
parent abed7aa9b5
commit 0effd02ed2
2 changed files with 48 additions and 47 deletions

View File

@ -46,11 +46,9 @@ class _ListPageState extends State<ListPage> {
List<Task> _loadingTasks = [];
int _currentPage = 1;
bool displayDoneTasks = false;
ListProvider? taskState;
late ListProvider taskState;
late KanbanClass _kanban;
PageStatus pageStatus = PageStatus.built;
@override
void initState() {
_list = widget.taskList;
@ -72,9 +70,9 @@ class _ListPageState extends State<ListPage> {
Widget body;
switch (pageStatus) {
switch (taskState.pageStatus) {
case PageStatus.built:
_loadList();
Future.delayed(Duration.zero, _loadList);
body = new Stack(children: [
ListView(),
Center(
@ -96,9 +94,8 @@ class _ListPageState extends State<ListPage> {
Center(child: Text("There was an error loading this view"))
]);
break;
case PageStatus.success:
body = taskState!.tasks.length > 0 || taskState!.buckets.length > 0
body = taskState.tasks.length > 0 || taskState.buckets.length > 0
? ListenableProvider.value(
value: taskState,
child: Theme(
@ -186,7 +183,7 @@ class _ListPageState extends State<ListPage> {
ListView _listView(BuildContext context) {
return ListView.builder(
padding: EdgeInsets.symmetric(vertical: 8.0),
itemCount: taskState!.tasks.length * 2,
itemCount: taskState.tasks.length * 2,
itemBuilder: (context, i) {
if (i.isOdd) return Divider();
@ -197,16 +194,16 @@ class _ListPageState extends State<ListPage> {
final index = i ~/ 2;
if (taskState!.maxPages == _currentPage &&
index == taskState!.tasks.length)
if (taskState.maxPages == _currentPage &&
index == taskState.tasks.length)
throw Exception("Check itemCount attribute");
if (index >= taskState!.tasks.length &&
_currentPage < taskState!.maxPages) {
if (index >= taskState.tasks.length &&
_currentPage < taskState.maxPages) {
_currentPage++;
_loadTasksForPage(_currentPage);
}
return _buildTile(taskState!.tasks[index]);
return _buildTile(taskState.tasks[index]);
});
}
@ -245,7 +242,7 @@ class _ListPageState extends State<ListPage> {
MaterialPageRoute(
builder: (context) => TaskEditPage(
task: task,
taskState: taskState!,
taskState: taskState,
),
),
),
@ -253,9 +250,7 @@ class _ListPageState extends State<ListPage> {
}
Future<void> _loadList() async {
setState(() {
pageStatus = PageStatus.loading;
});
taskState.pageStatus = (PageStatus.loading);
updateDisplayDoneTasks().then((value) async {
switch (_viewIndex) {
@ -264,15 +259,12 @@ class _ListPageState extends State<ListPage> {
break;
case 1:
await _kanban
.loadBucketsForPage(1)
.onError((error, stackTrace) => pageStatus = PageStatus.error)
.then((value) => pageStatus = PageStatus.success);
.loadBucketsForPage(1);
// load all buckets to get length for RecordableListView
while (_currentPage < taskState!.maxPages) {
while (_currentPage < taskState.maxPages) {
_currentPage++;
await _kanban.loadBucketsForPage(_currentPage)
.onError((error, stackTrace) => pageStatus = PageStatus.error)
.then((value) => pageStatus = PageStatus.success);
await _kanban
.loadBucketsForPage(_currentPage);
}
break;
default:
@ -287,9 +279,7 @@ class _ListPageState extends State<ListPage> {
context: context,
listId: _list.id,
page: page,
displayDoneTasks: displayDoneTasks)
.onError((error, stackTrace) => {pageStatus = PageStatus.error})
.then((value) => {pageStatus = PageStatus.success});
displayDoneTasks: displayDoneTasks);
}
Future<void> _addItemDialog(BuildContext context, [Bucket? bucket]) {

View File

@ -4,8 +4,9 @@ import 'package:vikunja_app/models/bucket.dart';
import 'package:vikunja_app/utils/calculate_item_position.dart';
import 'package:vikunja_app/global.dart';
import '../components/pagestatus.dart';
class ListProvider with ChangeNotifier {
bool _isLoading = false;
bool _taskDragging = false;
int _maxPages = 0;
@ -13,7 +14,6 @@ class ListProvider with ChangeNotifier {
List<Task> _tasks = [];
List<Bucket> _buckets = [];
bool get isLoading => _isLoading;
bool get taskDragging => _taskDragging;
@ -38,9 +38,19 @@ class ListProvider with ChangeNotifier {
List<Bucket> get buckets => _buckets;
PageStatus _pageStatus = PageStatus.built;
PageStatus get pageStatus => _pageStatus;
set pageStatus(PageStatus ps) {
_pageStatus = ps;
print("new PageStatus: ${ps.toString()}");
notifyListeners();
}
Future<void> loadTasks({required BuildContext context, required int listId, int page = 1, bool displayDoneTasks = true}) {
_tasks = [];
_isLoading = true;
notifyListeners();
Map<String, List<String>> queryParams = {
@ -56,20 +66,21 @@ class ListProvider with ChangeNotifier {
});
}
return VikunjaGlobal.of(context).taskService.getAllByList(listId, queryParams).then((response) {
_isLoading = false;
if(response == null)
throw Error();
if(response == null) {
pageStatus = PageStatus.error;
return;
}
if (response.headers["x-pagination-total-pages"] != null) {
_maxPages = int.parse(response.headers["x-pagination-total-pages"]!);
}
_tasks.addAll(response.body);
notifyListeners();
pageStatus = PageStatus.success;
});
}
Future<void> loadBuckets({required BuildContext context, required int listId, int page = 1}) {
_buckets = [];
_isLoading = true;
pageStatus = PageStatus.loading;
notifyListeners();
Map<String, List<String>> queryParams = {
@ -77,15 +88,16 @@ class ListProvider with ChangeNotifier {
};
return VikunjaGlobal.of(context).bucketService.getAllByList(listId, queryParams).then((response) {
if(response == null)
if(response == null) {
pageStatus = PageStatus.error;
return;
}
if (response.headers["x-pagination-total-pages"] != null) {
_maxPages = int.parse(response.headers["x-pagination-total-pages"]!);
}
_buckets.addAll(response.body);
_isLoading = false;
notifyListeners();
pageStatus = PageStatus.success;
});
}
@ -102,40 +114,39 @@ class ListProvider with ChangeNotifier {
done: false,
listId: listId,
);
_isLoading = true;
notifyListeners();
pageStatus = PageStatus.loading;
return globalState.taskService.add(listId, newTask).then((task) {
_isLoading = false;
if(task != null)
_tasks.insert(0, task);
notifyListeners();
pageStatus = PageStatus.success;
});
}
Future<void> addTask({required BuildContext context, required Task newTask, required int listId}) {
var globalState = VikunjaGlobal.of(context);
if (newTask.bucketId == null) _isLoading = true;
if (newTask.bucketId == null) pageStatus = PageStatus.loading;
notifyListeners();
return globalState.taskService.add(listId, newTask).then((task) {
if (task == null)
if (task == null) {
pageStatus = PageStatus.error;
return;
}
if (_tasks.isNotEmpty)
_tasks.insert(0, task);
if (_buckets.isNotEmpty) {
final bucket = _buckets[_buckets.indexWhere((b) => task.bucketId == b.id)];
bucket.tasks.add(task);
}
_isLoading = false;
notifyListeners();
pageStatus = PageStatus.success;
});
}
Future<Task?> updateTask({required BuildContext context, required Task task}) {
return VikunjaGlobal.of(context).taskService.update(task).then((task) {
// FIXME: This is ugly. We should use a redux to not have to do these kind of things.
// This is enough for now (it works) but we should definitly fix it later.
// This is enough for now (it works) but we should definitely fix it later.
if(task == null)
return null;
_tasks.asMap().forEach((i, t) {