在 Flutter Web 中嵌入 Youtube 视频

Posted

技术标签:

【中文标题】在 Flutter Web 中嵌入 Youtube 视频【英文标题】:Embedding a Youtube video in Flutter Web 【发布时间】:2020-05-07 01:57:05 【问题描述】:

是否可以在 Flutter 网页中嵌入 Youtube 视频?我尝试使用以下代码将 Youtube 嵌入到我的 Flutter 网站中,但页面上没有出现任何错误消息。

import 'package:flutter_html_view/flutter_html_view.dart';

Container(child: HtmlView(data: """
          <iframe src="https://www.youtube.com/embed/xMzkWfIR9Pk"  ></iframe>
          """)),

还尝试了此处推荐的解决方案 (WebView in Flutter Web),但这也不起作用。

import 'dart:ui' as ui

//ignore: undefined_prefixed_name
  ui.platformViewRegistry.registerViewFactory(
      'hello-world-html',
      (int viewId) => html.IFrameElement()
        ..width = '640'
        ..height = '360'
        ..src = 'https://www.youtube.com/embed/IyFZznAk69U'
        ..style.border = 'none');

【问题讨论】:

我快接近了。 ***.com/questions/59890992/… 【参考方案1】:

我以前打包叫flutter_html 但这给了我一些滚动问题。

Html(
    data: '<iframe   src="https://www.youtube.com/embed/D_mCZlQZg9Y" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
)

【讨论】:

【参考方案2】:

你应该去this

  import 'dart:html' as html;
  import 'dart:js' as js;
  import 'dart:ui' as ui;

  String viewID = "your-view-id";

  @override
  Widget build(BuildContext context) 
    // ignore: undefined_prefixed_name
    ui.platformViewRegistry.registerViewFactory(
        viewID,
            (int id) => html.IFrameElement()
          ..width = MediaQuery.of(context).size.width.toString()
          ..height = MediaQuery.of(context).size.height.toString()
          ..src = 'https://www.youtube.com/embed/IyFZznAk69U'
          ..style.border = 'none');

    return SizedBox(
      height: 500,
      child: HtmlElementView(
        viewType: viewID,
      ),
    );
  

【讨论】:

ui.platformViewRegistry有错误:尝试更正前缀或导入定义'platformViewRegistry'的库.dartundefined_prefixed_name 名称“platformViewRegistry”是通过前缀“ui”引用的,但在使用该前缀导入的任何库中都没有定义。【参考方案3】:

ext_video_player 支持 androidios 和 YouTube 网页版。您可以尝试从 ext_video_player repo 运行示例代码。

我使用不同操作系统的不同浏览器进行了测试。 Android、Mac、Windows 浏览器与 ext_video_player 一起工作正常。但它不适用于 iOS 浏览器。

【讨论】:

我尝试使用您指定的存储库。在网络上不起作用。它只是停留在线性进度小部件上,而不是加载 vid。【参考方案4】:

至少有两种解决方案:

a) video_player 包现在可以在三个主要平台上正常运行:android、ios 和 web

b) 本文介绍了一种将视频源嵌入到 Flutter Web 小部件中的好方法,即使该文章是针对本地文件的,最终过程也适用于 youtube 等 Web 源:https://vermahitesh.medium.com/play-local-video-on-flutter-web-d757bab0141c

【讨论】:

以上是关于在 Flutter Web 中嵌入 Youtube 视频的主要内容,如果未能解决你的问题,请参考以下文章

关闭网页视图后,来自 Youtube 嵌入式视频的音频继续播放 - Flutter

Flutter WebView 插件无法播放某些 YouTube 视频

如何将 Flutter Web 应用程序嵌入网站并通过网站将数据发送到 Flutter Web 应用程序

在 Flutter for Web 应用程序中嵌入网页作为 Widget(类似于 iframe)

Android webview 无法渲染通过 iframe 嵌入的 youtube 视频

Flutter全平台制霸!新增Web和嵌入式目标平台