Fixed lazy loading logs

This commit is contained in:
Juan Gilsanz Polo 2023-09-19 00:10:54 +02:00
parent 87bcdd337f
commit bc7cb4ccd4

View file

@ -31,8 +31,6 @@ class Logs extends StatefulWidget {
}
class _LogsState extends State<Logs> {
late ScrollController scrollController;
bool showDivider = true;
Log? selectedLog;
@ -65,25 +63,26 @@ class _LogsState extends State<Logs> {
}
}
void scrollListener() {
bool scrollListener(ScrollUpdateNotification scrollNotification) {
final logsProvider = Provider.of<LogsProvider>(context, listen: false);
if (scrollController.position.extentAfter < 500 && logsProvider.isLoadingMore == false) {
if (scrollNotification.metrics.extentAfter < 500 && logsProvider.isLoadingMore == false) {
logsProvider.fetchLogs(loadingMore: true);
}
if (scrollController.position.pixels > 0) {
if (scrollNotification.metrics.pixels > 0) {
setState(() => showDivider = false);
}
else {
setState(() => showDivider = true);
}
return false;
}
@override
void initState() {
final logsProvider = Provider.of<LogsProvider>(context, listen: false);
scrollController = ScrollController()..addListener(scrollListener);
logsProvider.fetchLogs(inOffset: 0);
fetchFilteringRules();
fetchClients();
@ -236,13 +235,17 @@ class _LogsState extends State<Logs> {
await logsProvider.fetchLogs(inOffset: 0);
},
displacement: 95,
child: NotificationListener(
onNotification: scrollListener,
child: CustomScrollView(
slivers: [
SliverOverlapInjector(
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
),
if (logsProvider.logsData!.data.isNotEmpty) SliverList.builder(
itemCount: logsProvider.logsData!.data.length,
itemCount: logsProvider.isLoadingMore
? logsProvider.logsData!.data.length + 1
: logsProvider.logsData!.data.length,
itemBuilder: (context, index) {
if (logsProvider.isLoadingMore == true && index == logsProvider.logsData!.data.length) {
return const Padding(
@ -310,6 +313,7 @@ class _LogsState extends State<Logs> {
],
),
),
),
)
);