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