trackController<T extends ZenController> method

T trackController<T extends ZenController>(
  1. T controller
)

Track a child controller (like ZenQuery, ZenStreamQuery) for automatic disposal

This prevents memory leaks by ensuring child controllers are disposed when this controller is disposed.

Note: You rarely need to call this manually! Child controllers created in onInit() are automatically tracked.

Example (manual):

class MyController extends ZenController {
  late final userQuery = trackController(ZenQuery<User>(
    queryKey: 'user',
    fetcher: (_) => api.getUser(),
  ));
}

Implementation

T trackController<T extends ZenController>(T controller) {
  if (_disposed) {
    throw StateError('Cannot track controller on disposed controller');
  }

  if (!_childControllers.contains(controller)) {
    _childControllers.add(controller);
    ZenLogger.logDebug(
        'Controller $runtimeType: Auto-tracking child controller ${controller.runtimeType} (total: ${_childControllers.length})');
  }

  return controller;
}