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();
}
// ... остальные методы
}