startTransition function

void startTransition(
  1. FutureOr<void> update()
)

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);
}