NativeView
Зарегистрированная хостом платформенная вью — карта, QR-сканер, превью камеры, … Хост регистрирует
возможность (registerView("map", factory) в своём коде); когда и с чем её показать —
это код приложения. QRScanner и CameraView — типизированные обёртки ровно над этим каналом.
Опциональна для хоста — всегда проверяй NativeView.isSupported(name), прежде чем предлагать
фичу.
Обзор
if (NativeView.isSupported('map')) {
const map = NativeView('map', { zoom: 12 })
.style({ flexGrow: 1, borderRadius: 12 })
.on('markerTap', data => toast(data.title))
screen.append(map) // встроена в раскладку…
await map.call('setCenter', 37.62, 55.75) // …и управляется по JSON-каналу
}Destination И элемент
Двойственная природа, как у каждого Presentable:
- Встроенная: помести её среди детей экрана — она раскладывается своими стилями как любой
элемент (
ElementStyle+ drawable-стили,animateTo/animateFrom, классы,onLayout). - Полноэкранная:
map.open({ transition })/map.close()— илиRouter.push(map); она становится текущим destination сonOpen/onClose/onBackPressed, как экран.
Один экземпляр живёт в одном месте за раз. Пуш уже встроенного экземпляра в полный экран — это
промоушен: нативная вью перепривязывается к новому родителю с сохранением состояния (работающая
камера продолжает работать). open() бросает исключение на хостах без навигационного канала
Presentable.
Канал call/event
const result = await view.call(method, ...args) // JSON-сериализация в обе стороны; reject при
// неизвестной вью/методе или без поддержки хоста
view.on(event, data => ...) // события, которые эмитит нативная сторона
view.off(event, callback)params (второй аргумент) уходит в фабрику хоста при создании — используй его для опций момента
конструирования; всё, что после, — через call.
Пишем типизированную обёртку
Плагины поставляют типизированный TS-класс над сырым каналом, а не выставляют строки коду
приложения — конвенцию смотри в QRScanner/CameraView (src/plugins/): зафиксируй
viewName/params, наслои типизированные методы поверх call/on и выстави геттер
isSupported.
Для возможностей без визуальной поверхности (GPS, bluetooth, …) используй сервисный канал —
тот же протокол без вью; Geolocation — его первый плагин.
Смотрите также
- QRScanner / CameraView — поставляемые обёртки.
- Geolocation — headless-собрат (сервисный канал).
- Экраны и Router — destination и переходы.