From ff9aa57548fa8ab4ae7787da0a728f4829c882b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20M=C3=BCllner?= Date: Thu, 5 Mar 2026 14:47:02 +0100 Subject: [PATCH] perf(collections): coalesce duplicate refresh triggers during in-flight loads --- lib/screens/collections_screen.dart | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/lib/screens/collections_screen.dart b/lib/screens/collections_screen.dart index c00e3f0..e1a88a4 100644 --- a/lib/screens/collections_screen.dart +++ b/lib/screens/collections_screen.dart @@ -21,6 +21,8 @@ class CollectionsScreenState extends State with WidgetsBindingObserver { List _collections = []; bool _isLoading = true; + bool _isLoadInFlight = false; + bool _reloadQueued = false; String? _error; String? _activeCollectionId; DateTime _lastLoadedAt = DateTime.fromMillisecondsSinceEpoch(0); @@ -61,11 +63,20 @@ class CollectionsScreenState extends State } } - Future _load() async { - setState(() { - _isLoading = true; - _error = null; - }); + Future _load({bool showLoading = true}) async { + if (_isLoadInFlight) { + _reloadQueued = true; + return; + } + + _isLoadInFlight = true; + + if (showLoading) { + setState(() { + _isLoading = true; + _error = null; + }); + } try { var list = await CollectionService.getMyCollections(); @@ -119,6 +130,12 @@ class CollectionsScreenState extends State _isLoading = false; }); logError('collections.load', e); + } finally { + _isLoadInFlight = false; + if (_reloadQueued) { + _reloadQueued = false; + Future.microtask(() => _load(showLoading: false)); + } } }