Перейти к основному содержимому

UIControllerCapabilityDelegate

Миксин, предоставляющий интерфейс для управления UI-контроллерами элементов в драйвере Duit.

Классы, использующие этот делегат, должны реализовать логику для отслеживания, привязки, отвязки и обновления UI-контроллеров.

Методы​

attachController​

void attachController(String id, UIElementController controller);

Привязывает UI-контроллер к драйверу.

Вызывается при создании нового UI-элемента или интерактивного виджета, который должен отслеживаться драйвером.

Параметры:

  • id — уникальный идентификатор контроллера
  • controller — экземпляр UIElementController

detachController​

void detachController(String id);

Отвязывает UI-контроллер с указанным идентификатором.

Вызывается при удалении UI-элемента, чтобы предотвратить утечки памяти.

getController​

UIElementController? getController(String id);

Возвращает UIElementController, связанный с указанным идентификатором, или null.

updateAttributes​

Future<void> updateAttributes(
String controllerId,
Map<String, dynamic> json,
);

Обновляет атрибуты UI-контроллера с указанным идентификатором.

Параметры:

  • controllerId — идентификатор контроллера
  • json — карта ключ-значение с атрибутами для обновления

controllersCount​

int get controllersCount;

Возвращает количество привязанных к делегату контроллеров.

Полезно для диагностики и отладки.

releaseResources​

void releaseResources();

Освобождает ресурсы делегата.

Типичные обязанности​

  • Сопоставление идентификаторов контроллеров с их активными экземплярами
  • Динамическая привязка/отвязка контроллеров при построении или удалении UI
  • Применение обновлений состояния и атрибутов от сервера
  • Предоставление методов для запроса или перечисления привязанных контроллеров

Пример реализации​

final class MyControllerManager with UIControllerCapabilityDelegate {
final _controllers = <String, UIElementController>{};


void attachController(String id, UIElementController controller) {
_controllers[id] = controller;
}


void detachController(String id) {
_controllers.remove(id)?.dispose();
}


UIElementController? getController(String id) => _controllers[id];


Future<void> updateAttributes(
String controllerId,
Map<String, dynamic> json,
) async {
_controllers[controllerId]?.updateState(json);
}


int get controllersCount => _controllers.length;


void releaseResources() {
for (final controller in _controllers.values) {
controller.dispose();
}
_controllers.clear();
}
}