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,
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,

View File

@ -22,47 +22,59 @@ class VisitHistoryWidget extends StatefulWidget {
}
class _VisitHistoryWidgetState extends State<VisitHistoryWidget> {
late Future<ApiCallResponse> visitFuture;
List<dynamic> visitaWrap = [];
var pageNumber = 1;
late Future<void> 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<ApiCallResponse?> _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<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
Widget build(BuildContext context) {
return FutureBuilder<dynamic>(
return FutureBuilder<void>(
future: visitFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
if (snapshot.connectionState == ConnectionState.waiting &&
visitaWrap.isEmpty) {
return Center(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
@ -72,26 +84,38 @@ class _VisitHistoryWidgetState extends State<VisitHistoryWidget> {
);
} 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<Color>(
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<VisitHistoryWidget> {
},
).whenComplete(() {
log('Dialog closed');
updateVisitFuture();
// updateVisitFuture();
_fetchVisits().then((response) {
safeSetState(() {
visitaWrap = PhpGroup.getVisitsCall
.visitasList(response!.jsonBody)
?.toList() ??
[];
visitFuture = Future.value(response);
});
});
}).catchError((err, stack) {});
},
);