startTransition function
Defers a non-urgent state update to a low-priority scheduled task while tracking transition status via isTransitionPending.
Immediately sets isTransitionPending to true, schedules update inside BloomScheduler
at TaskPriority.low, and resets isTransitionPending to false when all transition work is finished.
Use startTransition to keep high-frequency user interactions (like typing in a search box or toggling tabs) responsive by deferring expensive derived computations or large state updates.
Input(
attrs: {'placeholder': 'Filter items...'},
on: {
'input': (e) {
// Urgent: reflect keystroke in input signal immediately
searchQuery.value = e.value ?? '';
// Non-urgent: defer expensive list filtering to low-priority scheduler
startTransition(() {
filteredItems.value = performExpensiveFilter(searchQuery.value);
});
},
},
)
Implementation
void startTransition(FutureOr<void> Function() update) {
_pendingTransitionCount.value++;
_isTransitionPending.value = true;
BloomScheduler.schedule<void>(() async {
try {
await update();
} finally {
final remaining = _pendingTransitionCount.value - 1;
_pendingTransitionCount.value = remaining < 0 ? 0 : remaining;
_isTransitionPending.value = _pendingTransitionCount.value > 0;
}
}, priority: TaskPriority.low);
}