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:
parent
abed7aa9b5
commit
0effd02ed2
|
@ -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]) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user