fix: pagination in registerCompleteVisit

This commit is contained in:
jantunesmesias 2024-08-09 15:11:50 -03:00
parent c1f76c4be3
commit ccc4d4c717
2 changed files with 65 additions and 33 deletions

View File

@ -83,7 +83,6 @@ class _VisitRequestTemplateComponentWidgetState
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
SizedBox(height: MediaQuery.of(context).size.height * 0.02), SizedBox(height: MediaQuery.of(context).size.height * 0.02),
Container( Container(
width: MediaQuery.of(context).size.width * 0.3, width: MediaQuery.of(context).size.width * 0.3,
height: MediaQuery.of(context).size.width * 0.3, height: MediaQuery.of(context).size.width * 0.3,

View File

@ -22,47 +22,59 @@ class VisitHistoryWidget extends StatefulWidget {
} }
class _VisitHistoryWidgetState extends State<VisitHistoryWidget> { class _VisitHistoryWidgetState extends State<VisitHistoryWidget> {
late Future<ApiCallResponse> visitFuture; List<dynamic> visitaWrap = [];
var pageNumber = 1; var pageNumber = 1;
late Future<void> visitFuture;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// Inicialização inicial visitFuture = _fetchVisits();
visitFuture = ScheduleCompleteVisitPageModel().visitHistory(
requestFn: () => PhpGroup.getVisitsCall.call(
devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID,
atividade: 'getVisitas',
pageSize: 100,
pageNumber: pageNumber,
),
);
} }
void updateVisitFuture() { Future<ApiCallResponse?> _fetchVisits() async {
// Atualização do valor da variável late try {
setState(() { var response = await ScheduleCompleteVisitPageModel().visitHistory(
visitFuture = ScheduleCompleteVisitPageModel().visitHistory(
requestFn: () => PhpGroup.getVisitsCall.call( requestFn: () => PhpGroup.getVisitsCall.call(
devUUID: FFAppState().devUUID, devUUID: FFAppState().devUUID,
userUUID: FFAppState().userUUID, userUUID: FFAppState().userUUID,
cliID: FFAppState().cliUUID, cliID: FFAppState().cliUUID,
atividade: 'getVisitas', atividade: 'getVisitas',
pageSize: 100, pageSize: 10,
pageNumber: pageNumber, pageNumber: pageNumber,
), ),
); );
});
log('API response: ${response.jsonBody}');
var newVisits = response.jsonBody['visitas']
as List<dynamic>?; // 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return FutureBuilder<dynamic>( return FutureBuilder<void>(
future: visitFuture, future: visitFuture,
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) { if (snapshot.connectionState == ConnectionState.waiting &&
visitaWrap.isEmpty) {
return Center( return Center(
child: CircularProgressIndicator( child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>( valueColor: AlwaysStoppedAnimation<Color>(
@ -72,26 +84,38 @@ class _VisitHistoryWidgetState extends State<VisitHistoryWidget> {
); );
} else if (snapshot.hasError) { } else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}')); return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData || snapshot.data!.jsonBody == null) { } else if (visitaWrap.isEmpty) {
return Center( return Center(
child: Text(FFLocalizations.of(context).getVariableText( child: Text(
ptText: 'Nenhum visitante foi encontrado', FFLocalizations.of(context).getVariableText(
enText: 'No visitors found', ptText: 'Nenhum visitante foi encontrado',
))); enText: 'No visitors found',
),
),
);
} }
var wrapGetVisitsResponse = snapshot.data!; log('[A] - ${visitaWrap.length.toString()}');
var visitaWrap = PhpGroup.getVisitsCall
.visitasList(wrapGetVisitsResponse.jsonBody)
?.toList() ??
[];
return ListView.builder( return ListView.builder(
itemCount: visitaWrap.length, itemCount: visitaWrap.length + 1,
shrinkWrap: true, shrinkWrap: true,
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == visitaWrap.length) {
_loadMoreVisits();
return Center(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
FlutterFlowTheme.of(context).primary,
),
),
);
}
final visitaWrapItem = visitaWrap[index]; final visitaWrapItem = visitaWrap[index];
log('[B] - ${visitaWrap.length.toString()}');
return CardItemTemplateComponentWidget( return CardItemTemplateComponentWidget(
imagePath: 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', '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<VisitHistoryWidget> {
}, },
).whenComplete(() { ).whenComplete(() {
log('Dialog closed'); log('Dialog closed');
updateVisitFuture(); // updateVisitFuture();
_fetchVisits().then((response) {
safeSetState(() {
visitaWrap = PhpGroup.getVisitsCall
.visitasList(response!.jsonBody)
?.toList() ??
[];
visitFuture = Future.value(response);
});
});
}).catchError((err, stack) {}); }).catchError((err, stack) {});
}, },
); );