From ccc4d4c7173394a44d60db7b35686e948e9590eb Mon Sep 17 00:00:00 2001 From: jantunesmesias Date: Fri, 9 Aug 2024 15:11:50 -0300 Subject: [PATCH] fix: pagination in registerCompleteVisit --- .../details_component_widget.dart | 1 - .../visit_history_page_widget.dart | 97 +++++++++++++------ 2 files changed, 65 insertions(+), 33 deletions(-) diff --git a/lib/components/templates_components/details_component/details_component_widget.dart b/lib/components/templates_components/details_component/details_component_widget.dart index 13eae7e5..43e440c0 100644 --- a/lib/components/templates_components/details_component/details_component_widget.dart +++ b/lib/components/templates_components/details_component/details_component_widget.dart @@ -83,7 +83,6 @@ class _VisitRequestTemplateComponentWidgetState mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(height: MediaQuery.of(context).size.height * 0.02), - Container( width: MediaQuery.of(context).size.width * 0.3, height: MediaQuery.of(context).size.width * 0.3, diff --git a/lib/pages/visit_history_page/visit_history_page_widget.dart b/lib/pages/visit_history_page/visit_history_page_widget.dart index cfc9670c..fc5a818e 100644 --- a/lib/pages/visit_history_page/visit_history_page_widget.dart +++ b/lib/pages/visit_history_page/visit_history_page_widget.dart @@ -22,47 +22,59 @@ class VisitHistoryWidget extends StatefulWidget { } class _VisitHistoryWidgetState extends State { - late Future visitFuture; + List visitaWrap = []; var pageNumber = 1; + late Future visitFuture; @override void initState() { super.initState(); - // Inicialização inicial - visitFuture = ScheduleCompleteVisitPageModel().visitHistory( - requestFn: () => PhpGroup.getVisitsCall.call( - devUUID: FFAppState().devUUID, - userUUID: FFAppState().userUUID, - cliID: FFAppState().cliUUID, - atividade: 'getVisitas', - pageSize: 100, - pageNumber: pageNumber, - ), - ); + visitFuture = _fetchVisits(); } - void updateVisitFuture() { - // Atualização do valor da variável late - setState(() { - visitFuture = ScheduleCompleteVisitPageModel().visitHistory( + Future _fetchVisits() async { + try { + var response = await ScheduleCompleteVisitPageModel().visitHistory( requestFn: () => PhpGroup.getVisitsCall.call( devUUID: FFAppState().devUUID, userUUID: FFAppState().userUUID, cliID: FFAppState().cliUUID, atividade: 'getVisitas', - pageSize: 100, + pageSize: 10, pageNumber: pageNumber, ), ); - }); + + log('API response: ${response.jsonBody}'); + + var newVisits = response.jsonBody['visitas'] + as List?; // Ajuste conforme a estrutura da resposta + if (newVisits != null && newVisits.isNotEmpty) { + setState(() { + visitaWrap.addAll(newVisits); + }); + return response; + } else { + log('No new visits found'); + return null; + } + } catch (err) { + log('Erro ao carregar mais visitas: $err'); + } + } + + void _loadMoreVisits() { + pageNumber++; + visitFuture = _fetchVisits(); } @override Widget build(BuildContext context) { - return FutureBuilder( + return FutureBuilder( future: visitFuture, builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { + if (snapshot.connectionState == ConnectionState.waiting && + visitaWrap.isEmpty) { return Center( child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( @@ -72,26 +84,38 @@ class _VisitHistoryWidgetState extends State { ); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); - } else if (!snapshot.hasData || snapshot.data!.jsonBody == null) { + } else if (visitaWrap.isEmpty) { return Center( - child: Text(FFLocalizations.of(context).getVariableText( - ptText: 'Nenhum visitante foi encontrado', - enText: 'No visitors found', - ))); + child: Text( + FFLocalizations.of(context).getVariableText( + ptText: 'Nenhum visitante foi encontrado', + enText: 'No visitors found', + ), + ), + ); } - var wrapGetVisitsResponse = snapshot.data!; - var visitaWrap = PhpGroup.getVisitsCall - .visitasList(wrapGetVisitsResponse.jsonBody) - ?.toList() ?? - []; + log('[A] - ${visitaWrap.length.toString()}'); return ListView.builder( - itemCount: visitaWrap.length, + itemCount: visitaWrap.length + 1, shrinkWrap: true, physics: const BouncingScrollPhysics(), itemBuilder: (context, index) { + if (index == visitaWrap.length) { + _loadMoreVisits(); + return Center( + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + FlutterFlowTheme.of(context).primary, + ), + ), + ); + } + final visitaWrapItem = visitaWrap[index]; + log('[B] - ${visitaWrap.length.toString()}'); + return CardItemTemplateComponentWidget( imagePath: 'https://freaccess.com.br/freaccess/getImage.php?devUUID=${FFAppState().devUUID}&userUUID=${FFAppState().userUUID}&cliID=${FFAppState().cliUUID}&atividade=getFoto&Documento=${visitaWrapItem['VTE_DOCUMENTO'] ?? ''}&tipo=E', @@ -160,7 +184,16 @@ class _VisitHistoryWidgetState extends State { }, ).whenComplete(() { log('Dialog closed'); - updateVisitFuture(); + // updateVisitFuture(); + _fetchVisits().then((response) { + safeSetState(() { + visitaWrap = PhpGroup.getVisitsCall + .visitasList(response!.jsonBody) + ?.toList() ?? + []; + visitFuture = Future.value(response); + }); + }); }).catchError((err, stack) {}); }, );