【问题标题】:Flutter WebView exit fullscreen YouTube video issue: black screen with watch later and share buttonsFlutter WebView 退出全屏 YouTube 视频问题:黑屏,稍后观看和分享按钮
【发布时间】:2021-05-18 05:02:36
【问题描述】:

我有一个 Flutter 应用,可以在 WebView 中显示 YouTube 视频。 它工作正常,除了在一种情况下:如果你全屏打开它并且在 YouTube 播放器中嵌入“从全屏退出”按钮: 从全屏退出后,我仍然听到声音,但我看到一个带有按钮共享的黑屏,稍后再观看。 如果我通过按 android 后退按钮退出全屏模式,它可以正常工作。 怎么解决?

  Widget build(BuildContext context) {

    return  Container(
            child: MyWebView(
              initUrl:
                  'https://www.youtube.com/embed/${id}?autoplay=1&rel=0&showinfo=0',
            ),
          )
  }


import 'package:flutter_inappwebview/flutter_inappwebview.dart';

class MyWebView extends StatefulWidget {
  final String initUrl;

  MyWebView({
    this.initUrl,
  });

  @override
  MyWebViewState createState() => MyWebViewState();
}


class MyWebViewState extends State<MyWebView> {
  InAppWebViewController webView;
  String url;
  bool webLoadError = false;

  @override
  void initState() {
    url = widget.initUrl;
    super.initState();
  }


  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        InAppWebView(
          initialUrl: url,
          initialHeaders: widget.headers,
          initialOptions: InAppWebViewGroupOptions(
            crossPlatform: InAppWebViewOptions(
              debuggingEnabled: true,
              useShouldOverrideUrlLoading: true,
              clearCache: true,
              mediaPlaybackRequiresUserGesture: false,
            ),
          ),
          onLoadStart: (controller, string) {
            setState(() {
              webView = controller;
              webLoadError = false;
            });
          },
    );
  }
}

【问题讨论】:

  • 你得到答案了吗?
  • @abbasjafary 不,我尝试了所有建议,但问题仍然存在。有什么方法可以在不暂停视频的情况下重新计算 WebView 布局?
  • 不抱歉我的朋友

标签: android flutter webview youtube


【解决方案1】:

如果您输入您的代码,也许我可以为您提供更多帮助。也许原因是当你展示它时视频还没有准备好。你可以用_controller.value.initialized检查,当视频没有准备好返回Container()code sn-p:

return Center(
  child: _controller.value.initialized
      ? AspectRatio(
          aspectRatio: _controller.value.aspectRatio,
          child: VideoPlayer(_controller),
        )
      : Container(),
);

或者,如果您使用 webview,请从应用程序标签中删除这些行。

android:hardwareAccelerated="false"

android:largeHeap="true"

【讨论】:

  • android:hardwareAccelerated 是真的,我不使用 largeHeap 选项
  • 在脚手架中插入这个:resizeToAvoidBottomInset: false
  • 看起来我找到了解决方案:我为 webview Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 添加了自定义用户代理。看起来它强制 youtube 视频的高清分辨率,这在某种程度上有所帮助。
  • 太棒了,我太高兴了
猜你喜欢
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 2019-03-30
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多