fix paginacao

This commit is contained in:
jantunesmessias 2025-02-13 16:54:21 -03:00
parent 7b0297a491
commit b1a09d999c
2 changed files with 13 additions and 8 deletions

View File

@ -20,27 +20,30 @@ class _VehicleHistoryScreenState extends State<VehicleHistoryScreen>
@override
void initState() {
super.initState();
_pagingController.addPageRequestListener(
(dynamic pageKey) => fetchPage(
(int pageKey) => fetchPage(
dataProvider: () async {
final newItems = await apiCall.call(pageKey.toString());
if (newItems.jsonBody == null) return (false, null);
final List<dynamic> vehicles =
(newItems.jsonBody['vehicles'] as List<dynamic>?) ?? [];
_pagingController.nextPageKey = pageKey + 1;
safeSetState(() {
count = newItems.jsonBody['total_rows'] ?? 0;
});
return (vehicles.isNotEmpty, vehicles);
},
onDataUnavailable: () {
onDataUnavailable: (vehicles) {
setState(() {});
showNoMoreDataSnackBar(context);
_pagingController.appendLastPage(vehicles);
},
onDataAvailable: (vehicles) {
setState(() {});
_pagingController.appendLastPage(vehicles);
_pagingController.appendPage(vehicles, pageKey + 1);
},
onFetchError: (e, s) {
DialogUtil.errorDefault(context);

View File

@ -32,8 +32,8 @@ mixin Pageable<T extends StatefulWidget> on State<T> {
buildLoadingIndicator(context),
noItemsFoundIndicatorBuilder: (context) =>
buildNoDataFound(context, noDataFound),
firstPageErrorIndicatorBuilder: (context) => const Placeholder(),
newPageErrorIndicatorBuilder: (context) => const Placeholder(),
// firstPageErrorIndicatorBuilder: (context) => const Placeholder(),
// newPageErrorIndicatorBuilder: (context) => const Placeholder(),
),
),
),
@ -43,15 +43,17 @@ mixin Pageable<T extends StatefulWidget> on State<T> {
Future<void> fetchPage({
required Future<(bool, dynamic)> Function() dataProvider,
required void Function(dynamic data) onDataAvailable,
required void Function() onDataUnavailable,
required void Function(dynamic data) onDataUnavailable,
required void Function(Object error, StackTrace stackTrace) onFetchError,
}) async {
try {
print('develop ->');
final (bool isDataAvailable, dynamic data) = await dataProvider();
print('develop -> $isDataAvailable');
if (isDataAvailable) {
onDataAvailable(data);
} else {
onDataUnavailable();
onDataUnavailable(data);
}
} catch (error, stackTrace) {
onFetchError(error, stackTrace);