initUiKitView static method
- required int id,
- required String viewType,
- UiKitViewGestureBlockingPolicy gestureBlockingPolicy = .fallbackToPluginDefault,
- required TextDirection layoutDirection,
- dynamic creationParams,
- MessageCodec? creationParamsCodec,
- VoidCallback? onFocus,
Factory method to create a UiKitView.
The id parameter is an unused unique identifier generated with
platformViewsRegistry.
The viewType parameter is the identifier of the iOS view type to be
created, a factory for this view type must have been registered on the
platform side. Platform view factories are typically registered by plugin
code.
The onFocus parameter is a callback that will be invoked when the UIKit
view asks to get the input focus. If creationParams is non null then
creationParamsCodec must not be null.
See: https://docs.flutter.dev/platform-integration/ios/platform-views
Implementation
static Future<UiKitViewController> initUiKitView({
required int id,
required String viewType,
UiKitViewGestureBlockingPolicy gestureBlockingPolicy = .fallbackToPluginDefault,
required TextDirection layoutDirection,
dynamic creationParams,
MessageCodec<dynamic>? creationParamsCodec,
VoidCallback? onFocus,
}) async {
assert(creationParams == null || creationParamsCodec != null);
final String gestureBlockingPolicyValue = switch (gestureBlockingPolicy) {
UiKitViewGestureBlockingPolicy.eager => 'eager',
UiKitViewGestureBlockingPolicy.waitUntilTouchesEnded => 'waitUntilTouchesEnded',
UiKitViewGestureBlockingPolicy.fallbackToPluginDefault => 'fallbackToPluginDefault',
UiKitViewGestureBlockingPolicy.doNotBlockGesture => 'doNotBlockGesture',
};
// TODO(amirh): pass layoutDirection once the system channel supports it.
// https://github.com/flutter/flutter/issues/133682
final args = <String, dynamic>{
'id': id,
'viewType': viewType,
'gestureBlockingPolicy': gestureBlockingPolicyValue,
};
if (creationParams != null) {
final ByteData paramsByteData = creationParamsCodec!.encodeMessage(creationParams)!;
args['params'] = Uint8List.view(paramsByteData.buffer, 0, paramsByteData.lengthInBytes);
}
await SystemChannels.platform_views.invokeMethod<void>('create', args);
if (onFocus != null) {
_instance._focusCallbacks[id] = onFocus;
}
return UiKitViewController._(id, layoutDirection);
}