blob: cc252bf20b826972b798d437dd45b227d01e906c [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
import 'webview_controller.dart';
/// Displays a native WebView as a Widget.
///
/// ## Platform-Specific Features
/// This class contains an underlying implementation provided by the current
/// platform. Once a platform implementation is imported, the examples below
/// can be followed to use features provided by a platform's implementation.
///
/// {@macro webview_flutter.WebViewWidget.fromPlatformCreationParams}
///
/// Below is an example of accessing the platform-specific implementation for
/// iOS and Android:
///
/// ```dart
/// final WebViewController controller = WebViewController();
///
/// final WebViewWidget webViewWidget = WebViewWidget(controller: controller);
///
/// if (WebViewPlatform.instance is WebKitWebViewPlatform) {
/// final WebKitWebViewWidget webKitWidget =
/// webViewWidget.platform as WebKitWebViewWidget;
/// } else if (WebViewPlatform.instance is AndroidWebViewPlatform) {
/// final AndroidWebViewWidget androidWidget =
/// webViewWidget.platform as AndroidWebViewWidget;
/// }
/// ```
class WebViewWidget extends StatelessWidget {
/// Constructs a [WebViewWidget].
///
/// See [WebViewWidget.fromPlatformCreationParams] for setting parameters for
/// a specific platform.
WebViewWidget({
Key? key,
required WebViewController controller,
TextDirection layoutDirection = TextDirection.ltr,
Set<Factory<OneSequenceGestureRecognizer>> gestureRecognizers =
const <Factory<OneSequenceGestureRecognizer>>{},
}) : this.fromPlatformCreationParams(
key: key,
params: PlatformWebViewWidgetCreationParams(
controller: controller.platform,
layoutDirection: layoutDirection,
gestureRecognizers: gestureRecognizers,
),
);
/// Constructs a [WebViewWidget] from creation params for a specific platform.
///
/// {@template webview_flutter.WebViewWidget.fromPlatformCreationParams}
/// Below is an example of setting platform-specific creation parameters for
/// iOS and Android:
///
/// ```dart
/// final WebViewController controller = WebViewController();
///
/// PlatformWebViewWidgetCreationParams params =
/// PlatformWebViewWidgetCreationParams(
/// controller: controller.platform,
/// layoutDirection: TextDirection.ltr,
/// gestureRecognizers: const <Factory<OneSequenceGestureRecognizer>>{},
/// );
///
/// if (WebViewPlatform.instance is WebKitWebViewPlatform) {
/// params = WebKitWebViewWidgetCreationParams
/// .fromPlatformWebViewWidgetCreationParams(
/// params,
/// );
/// } else if (WebViewPlatform.instance is AndroidWebViewPlatform) {
/// params = AndroidWebViewWidgetCreationParams
/// .fromPlatformWebViewWidgetCreationParams(
/// params,
/// );
/// }
///
/// final WebViewWidget webViewWidget =
/// WebViewWidget.fromPlatformCreationParams(
/// params: params,
/// );
/// ```
/// {@endtemplate}
WebViewWidget.fromPlatformCreationParams({
Key? key,
required PlatformWebViewWidgetCreationParams params,
}) : this.fromPlatform(key: key, platform: PlatformWebViewWidget(params));
/// Constructs a [WebViewWidget] from a specific platform implementation.
WebViewWidget.fromPlatform({super.key, required this.platform});
/// Implementation of [PlatformWebViewWidget] for the current platform.
final PlatformWebViewWidget platform;
/// The layout direction to use for the embedded WebView.
late final TextDirection layoutDirection = platform.params.layoutDirection;
/// 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 (default), the web view will only
/// handle pointer events for gestures that were not claimed by any other
/// gesture recognizer.
late final Set<Factory<OneSequenceGestureRecognizer>> gestureRecognizers =
platform.params.gestureRecognizers;
@override
Widget build(BuildContext context) {
return platform.build(context);
}
}