YoutubePlayerController constructor

YoutubePlayerController({
  1. YoutubePlayerParams params = const YoutubePlayerParams(),
  2. ValueChanged<YoutubeWebResourceError>? onWebResourceError,
})

Implementation

YoutubePlayerController({
  this.params = const YoutubePlayerParams(),
  ValueChanged<YoutubeWebResourceError>? onWebResourceError,
}) {
  _eventHandler = YoutubePlayerEventHandler(this);

  late final PlatformWebViewControllerCreationParams webViewParams;
  if (WebViewPlatform.instance is WebKitWebViewPlatform) {
    webViewParams = WebKitWebViewControllerCreationParams(
      allowsInlineMediaPlayback: true,
      mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
    );
  } else {
    webViewParams = const PlatformWebViewControllerCreationParams();
  }

  final navigationDelegate = NavigationDelegate(
    onWebResourceError: (error) {
      log(error.description, name: error.errorType.toString());
      onWebResourceError?.call(error);
    },
    onNavigationRequest: (request) {
      final uri = Uri.tryParse(request.url);
      return _decideNavigation(uri);
    },
  );

  webViewController = WebViewController.fromPlatformCreationParams(
    webViewParams,
  )
    ..setJavaScriptMode(JavaScriptMode.unrestricted)
    ..setNavigationDelegate(navigationDelegate)
    ..setUserAgent(params.userAgent)
    ..addJavaScriptChannel(
      _youtubeJSChannelName,
      onMessageReceived: _eventHandler,
    )
    ..enableZoom(false);

  final webViewPlatform = webViewController.platform;
  if (webViewPlatform is AndroidWebViewController) {
    AndroidWebViewController.enableDebugging(false);
    webViewPlatform.setMediaPlaybackRequiresUserGesture(false);
  } else if (webViewPlatform is WebKitWebViewController) {
    webViewPlatform.setAllowsBackForwardNavigationGestures(false);
  }
}