Onstart sync progressbar: fix potential bug with spinner on interrupt synchronization

This commit is contained in:
HDDen
2026-05-26 00:37:42 +03:00
parent 4dd472e3c3
commit 2328848400
2 changed files with 13 additions and 3 deletions
+9
View File
@@ -3637,6 +3637,12 @@ class MeshCoreConnector extends ChangeNotifier {
if (completed) {
_hasLoadedChannels = true;
_previousChannelsCache.clear();
} else if (_channels.isEmpty && _previousChannelsCache.isNotEmpty) {
// A failed initial sync should not leave the UI empty/spinning forever.
// Restore the pre-sync list so cached channels remain usable.
_channels.addAll(_previousChannelsCache);
_applyChannelOrder();
_recalculateCachedChannelsUnreadTotal();
}
if (isConnected) {
@@ -3644,6 +3650,9 @@ class MeshCoreConnector extends ChangeNotifier {
}
// Keep cache on failure/disconnection for future attempts
if (!completed) {
notifyListeners();
}
}
void _startPostChannelInitialQueuedMessageSync() {
+4 -3
View File
@@ -155,12 +155,13 @@ class _ChannelsScreenState extends State<ChannelsScreen>
},
child: () {
final channels = connector.channels;
final waitingForInitialChannels =
!connector.hasLoadedChannels && !connector.isLoadingChannels;
final waitingForFirstChannel =
connector.isLoadingChannels && channels.isEmpty;
if (waitingForInitialChannels || waitingForFirstChannel) {
// Only block the list while the first channel is actively loading.
// If the initial sync aborts, show cached/partial channels instead
// of trapping the user behind an idle spinner.
if (waitingForFirstChannel) {
return const Center(child: CircularProgressIndicator());
}