XDriver
Публичный API для работы с драйвером Duit.
XDriver является расширением типа (extension type) над UIDriver, предоставляющим удобный интерфейс для инициализации и управления Duit-приложением в различных режимах работы.
Режимы работы
- Remote — подключение к удаленному серверу через транспортный слой
- Static — работа с предварительно заданным JSON-контентом без серверных запросов
- Native Module — интеграция Duit как модуля в существующее нативное приложение
Конструкторы
XDriver.remote
Создает драйвер для работы с удаленным сервером Duit.
final driver = XDriver.remote(
transportManager: HttpTransportManager(
url: '/api/layout',
baseUrl: 'https://api.example.com',
),
initialRequestPayload: {
'userId': '12345',
'theme': 'dark',
},
loggingManager: CustomLogger(),
);
Обязательные параметры:
transportManager— менеджер транспортного слоя для связи с сервером
Опциональные параметры:
initialRequestPayload— дополнительные данные для первого запроса к серверуnativeModuleManager— делегат для управления нативными модулямиscriptingManager— делегат для выполнения клиентских скриптовloggingManager— делегат для настройки логированияfocusManager— делегат для управления фокусом UI-элементовactionManager— делегат для выполнения серверных действийcontrollerManager— делегат для управления UI-контроллерамиviewManager— делегат для управления моделями представления
XDriver.static
Создает драйвер для работы со статическим JSON-контентом.
final uiContent = {
'type': 'Column',
'children': [
{'type': 'Text', 'data': 'Hello World'},
],
};
final driver = XDriver.static(uiContent);
Обязательные параметры:
content— JSON-структура с описанием UI согласно спецификации Duit
Выбрасывает:
StateErrorеслиcontentпуст
XDriver.nativeModule
Создает драйвер для режима нативного модуля.
final driver = XDriver.nativeModule(
nativeModuleManager: MyNativeModuleManager(),
initialRequestPayload: {
'hostVersion': '1.0.0',
'features': ['analytics', 'payments'],
},
);
Методы
init
Инициализирует драйвер и подготавливает его к работе.
await driver.init();
Этот метод должен быть вызван перед использованием драйвера. Выполняет:
- Инициализацию транспортного слоя
- Загрузку начального UI-контента
- Настройку всех зарегистрированных делегатов и менеджеров
dispose
Освобождает ресурсы, используемые драйвером.
driver.dispose();
attachExternalHandler
Регистрирует обработчик внешних событий.
driver.attachExternalHandler(
UserDefinedHandlerKind.custom('onButtonClick'),
(eventData) {
print('Button clicked: ${eventData['id']}');
},
);
addExternalEventStream
Добавляет внешний поток событий для обработки драйвером.
final websocketStream = WebSocketChannel.connect(
Uri.parse('ws://example.com'),
).stream.map((data) => jsonDecode(data));
driver.addExternalEventStream(websocketStream);
Пример использования
class MyWidget extends StatefulWidget {
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late final XDriver driver;
void initState() {
super.initState();
driver = XDriver.remote(
transportManager: HttpTransportManager(
url: '/api/layout',
baseUrl: 'https://api.example.com',
),
);
}
void dispose() {
driver.dispose();
super.dispose();
}
Widget build(BuildContext context) {
return DuitViewHost.withDriver(
driver: driver,
placeholder: const CircularProgressIndicator(),
);
}
}
Рекомендуется использовать XDriver вместе с DuitViewHost, который автоматически управляет жизненным циклом драйвера.