From 85ca4c0d5a916388b3b46779ebb1379139793257 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 20 May 2026 11:03:52 +0000 Subject: [PATCH] fix(storage): notify bindings after public storage clear finishes EnsembleStorage.clear() fired ModelChangeEvent for each key while clearPublicStorage() was still running asynchronously. Bindings re-evaluate by reading GetStorage, so UI could refresh from stale values. Defer dispatches until clearPublicStorage completes. Co-authored-by: Sharjeel Yunus --- modules/ensemble/lib/framework/data_context.dart | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/ensemble/lib/framework/data_context.dart b/modules/ensemble/lib/framework/data_context.dart index 5a34dfa67..584b8d4bf 100644 --- a/modules/ensemble/lib/framework/data_context.dart +++ b/modules/ensemble/lib/framework/data_context.dart @@ -795,10 +795,14 @@ class EnsembleStorage with Invokable { .getKeys() .where((key) => !key.startsWith('enc_')) .toList(); - StorageManager().clearPublicStorage(); - for (final key in keys) { - ScreenController().dispatchStorageChanges(context, key, null); - } + // [clearPublicStorage] is async. Bindings listen for storage events then + // re-evaluate by reading GetStorage, so notifying before removes finish can + // refresh widgets from stale persisted values. + unawaited(StorageManager().clearPublicStorage().then((_) { + for (final key in keys) { + ScreenController().dispatchStorageChanges(context, key, null); + } + })); } @override