From 1bb72435cdc195d028177e322a8aec93bd60041a Mon Sep 17 00:00:00 2001 From: Ryoichi Izumita Date: Wed, 27 Mar 2024 06:40:05 +0900 Subject: [PATCH] Wrapped the update processing of AsyncSignal.value in a batch When AsyncSignal.value is updated, the value propagates to the monitoring side while the state of _completer is not synchronized, so it has been fixed to ensure that the state of _completer is synchronized. --- .../signals_core/lib/src/async/signal.dart | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/signals_core/lib/src/async/signal.dart b/packages/signals_core/lib/src/async/signal.dart index 442f5189..c0cf486b 100644 --- a/packages/signals_core/lib/src/async/signal.dart +++ b/packages/signals_core/lib/src/async/signal.dart @@ -190,29 +190,37 @@ class AsyncSignal extends ValueSignal> { /// Set the error with optional stackTrace to [AsyncError] void setError(Object error, [StackTrace? stackTrace]) { - value = AsyncState.error(error, stackTrace); - if (_completer.isCompleted) _completer = Completer(); - _completer.complete(true); + batch(() { + value = AsyncState.error(error, stackTrace); + if (_completer.isCompleted) _completer = Completer(); + _completer.complete(true); + }); } /// Set the value to [AsyncData] void setValue(T value) { - this.value = AsyncState.data(value); - if (_completer.isCompleted) _completer = Completer(); - _completer.complete(true); + batch(() { + this.value = AsyncState.data(value); + if (_completer.isCompleted) _completer = Completer(); + _completer.complete(true); + }); } /// Set the loading state to [AsyncLoading] void setLoading([AsyncState? state]) { - value = state ?? AsyncState.loading(); - _completer = Completer(); + batch(() { + value = state ?? AsyncState.loading(); + _completer = Completer(); + }); } /// Reset the signal to the initial value void reset([AsyncState? value]) { - this.value = value ?? _initialValue; - _initialized = false; - if (_completer.isCompleted) _completer = Completer(); + batch(() { + this.value = value ?? _initialValue; + _initialized = false; + if (_completer.isCompleted) _completer = Completer(); + }); } /// Initialize the signal @@ -436,4 +444,4 @@ AsyncSignal asyncSignal( equality: equality, autoDispose: autoDispose, ); -} \ No newline at end of file +}