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

ViewModelCapabilityDelegate

Миксин, предоставляющий возможности для управления и взаимодействия с представлениями (views) в системе Duit UI.

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

Методы​

eventStream​

Stream<UIDriverEvent> get eventStream;

Поток событий драйвера (UIDriverEvent), которыми управляет делегат.

Используется для прослушивания событий драйвера и обновления состояния в ответ.

buildContext​

BuildContext get buildContext;

Текущий BuildContext, связанный с драйвером.

context (setter)​

set context(BuildContext value);

Устанавливает текущий BuildContext для делегата.

addUIDriverEvent​

void addUIDriverEvent(UIDriverEvent event);

Добавляет событие UIDriverEvent в поток событий.

addUIDriverError​

void addUIDriverError(Object error, [StackTrace? stackTrace]);

Сообщает об ошибке, произошедшей в контексте драйвера.

notifyWidgetDisplayStateChanged​

void notifyWidgetDisplayStateChanged(String viewTag, int state);

Уведомляет драйвер об изменении состояния отображения виджета.

Параметры:

  • viewTag — тег виджета
  • state — новое состояние (0 = не видим, 1 = видим и отображен)

isWidgetReady​

bool isWidgetReady(String viewTag);

Проверяет, готов ли виджет к отображению.

prepareLayout​

Future<DuitView?> prepareLayout(Map<String, dynamic> json);

Подготавливает и валидирует конфигурацию layout из JSON, возвращая экземпляр DuitView.

Параметры:

  • json — структура layout (виджеты, свойства, отношения)

Возвращает: DuitView для дальнейшего использования или null при невалидном layout.

currentView​

DuitView? get currentView;

Возвращает текущее отображаемое представление.

releaseResources​

void releaseResources();

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

Пример использования​

final class MyViewManager with ViewModelCapabilityDelegate {
final _eventController = StreamController<UIDriverEvent>.broadcast();
BuildContext? _context;
DuitView? _currentView;


Stream<UIDriverEvent> get eventStream => _eventController.stream;


BuildContext get buildContext => _context!;


set context(BuildContext value) => _context = value;


void addUIDriverEvent(UIDriverEvent event) {
_eventController.add(event);
}


void addUIDriverError(Object error, [StackTrace? stackTrace]) {
_eventController.addError(error, stackTrace);
}


Future<DuitView?> prepareLayout(Map<String, dynamic> json) async {
// Парсинг и подготовка layout
return _currentView;
}


DuitView? get currentView => _currentView;


void releaseResources() {
_eventController.close();
}

// ... остальные методы
}