build method
- required BuildContext context,
- required CreationParams creationParams,
- WebViewPlatformCreatedCallback? onWebViewPlatformCreated,
- Set<
Factory< ? gestureRecognizers,OneSequenceGestureRecognizer> > - required WebViewPlatformCallbacksHandler webViewPlatformCallbacksHandler,
Builds a new WebView.
Returns a Widget tree that embeds the created webview.
creationParams
are the initial parameters used to setup the webview.
webViewPlatformHandler
will be used for handling callbacks that are made by the created
WebViewPlatformController.
onWebViewPlatformCreated
will be invoked after the platform specific WebViewPlatformController
implementation is created with the WebViewPlatformController instance as a parameter.
gestureRecognizers
specifies which gestures should be consumed by the web view.
It is possible for other gesture recognizers to be competing with the web view on pointer
events, e.g if the web view is inside a ListView the ListView will want to handle
vertical drags. The web view will claim gestures that are recognized by any of the
recognizers on this list.
When gestureRecognizers
is empty or null, the web view will only handle pointer events for gestures that
were not claimed by any other gesture recognizer.
webViewPlatformHandler
must not be null.
Implementation
@override
Widget build({
required BuildContext context,
required CreationParams creationParams,
WebViewPlatformCreatedCallback? onWebViewPlatformCreated,
Set<Factory<OneSequenceGestureRecognizer>>? gestureRecognizers,
required WebViewPlatformCallbacksHandler webViewPlatformCallbacksHandler,
}) {
assert(Platform.isAndroid);
return PlatformViewLink(
viewType: 'plugin_mappintelligence/webview',
surfaceFactory: (
BuildContext context,
PlatformViewController controller,
) {
return AndroidViewSurface(
controller: controller as AndroidViewController,
gestureRecognizers: gestureRecognizers ??
const <Factory<OneSequenceGestureRecognizer>>{},
hitTestBehavior: PlatformViewHitTestBehavior.opaque,
);
},
onCreatePlatformView: (PlatformViewCreationParams params) {
return PlatformViewsService.initSurfaceAndroidView(
id: params.id,
viewType: 'plugin_mappintelligence/webview',
// WebView content is not affected by the Android view's layout direction,
// we explicitly set it here so that the widget doesn't require an ambient
// directionality.
layoutDirection: TextDirection.rtl,
creationParams: MethodChannelWebViewPlatform.creationParamsToMap(
creationParams,
usesHybridComposition: true,
),
creationParamsCodec: const StandardMessageCodec(),
)
..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
..addOnPlatformViewCreatedListener((int id) {
if (onWebViewPlatformCreated == null) {
return;
}
onWebViewPlatformCreated(
MethodChannelWebViewPlatform(id, webViewPlatformCallbacksHandler),
);
})
..create();
},
);
}