onInit method

  1. @override
void onInit()
override

Callback invoked after the controller is instantiated and registered.

Override this method to perform setup logic such as starting listeners, initializing reactive state, or pre-fetching data.

Always call super.onInit() if overriding to ensure framework invariants.

Implementation

@override
void onInit() {
  super.onInit();
  _reactiveTasksEngine = _TaskEngine(maxConcurrent: maxConcurrentTasks);

  // Initialize reactive state
  // Moved to field declaration to support implicit registration (constructor-phase capture)
  // Manually register for auto-disposal to support usage without DI/auto-registration
  autoDispose(tasks);
  autoDispose(taskWeights);
  autoDispose(taskProgress);

  totalProgress = (() {
    if (tasks.isEmpty) return 0.0;
    double sumProgress = 0;
    double sumWeight = 0;

    for (final id in tasks.keys) {
      final status = tasks[id]!;
      final weight = taskWeights[id] ?? 1.0;

      final p = switch (status) {
        LxSuccess() => 1.0,
        LxWaiting() => taskProgress[id] ?? 0.0,
        _ => 0.0,
      };

      sumProgress += p * weight;
      sumWeight += weight;
    }

    return sumWeight == 0 ? 0.0 : sumProgress / sumWeight;
  }).lx.named('totalProgress');

  isBusy = (() => tasks.values.any((s) => s is LxWaiting)).lx.named('isBusy');

  // Initialize reactive state
  // Manually register for auto-disposal to support usage without DI/auto-registration
  autoDispose(tasks);
  autoDispose(taskWeights);
  autoDispose(taskProgress);
  autoDispose(isBusy);
  autoDispose(totalProgress);
}