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

View File

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