3

我正在制作一个页面来显示来自 youtube 的大量视频,并在颤振网络中使用ext_video_player。但现在我想启用显示控件。我也希望它可以用于应用程序。我在这个堆栈中看到了流帖子。但是咀嚼播放器说它需要来自 video_player 而不是 ext_video_player 的视频控制器播放器。有没有其他方法可以做到这一点,以便它既适用于 Flutter Web 和应用程序,也适用于 youtube 视频。由于某些原因,youtube 播放器插件不是一种选择。我什至无法做到这一点。使用 rn 的代码

class videoBox2 extends StatefulWidget {
  String Video;
  videoBox2(this.Video);
  @override
  _videoBox2State createState() => _videoBox2State(Video);
}

class _videoBox2State extends State<videoBox2> {
  String Video;
  bool error = false;
  _videoBox2State(this.Video);
  VideoPlayerController _controller;
  @override
  void dispose(){
    super.dispose();
    _controller.dispose();
  }
  @override
  void initState(){
    super.initState();
    _controller = VideoPlayerController.network(
      Video,
    );

    _controller.initialize().then((value) {
      setState(() {
      });
    });
    _controller.addListener(() {
      if (_controller.value.hasError) {
        setState(() {
          error = true;
          print(Video);
        });
      }
    });
  }
  @override
  Widget build(BuildContext context) {
    return error?Container(
        decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.all(Radius.circular(15))
        ),
        child: Image(fit:BoxFit.cover,image:NetworkImage("https://hiapseng-thailand.com/wp-content/themes/skywalker/facilities/video-placeholder.jpg"))
    ):GestureDetector(
        onTap:(){
          _controller.value.isPlaying?
          _controller.pause()
              :_controller.play();
        },
        child: Container(
          width:MediaQuery.of(context).size.width*0.7,
          decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(15))
          ),
          child:  VideoPlayer(_controller),
        )
    );
  }
}
4

2 回答 2

3

所以我最后做的是一个非常简单的技术。我导入了 Chewie 视频播放器,并从外部库中的 dart 插件打开了它的文件。然后我把所有的video_player/video_player.dart都改成了ext_video_player/ext_video_player.dart。这作为 ext_video_player 只是视频播放器的扩展

警告:- 这将影响您所有使用咀嚼播放器的项目。进行此更改,构建项目,然后删除更改

所以你要做的是去外部库文件夹,然后打开 Dart 包,然后向下滚动到文件夹chewie-0.12.0(或你正在使用的任何包)\

然后打开源文件夹,然后转到这些文件:-\

  1. 咀嚼播放器.dart
  2. cupertino_controls.dart
  3. cupertino_progress_bar.dart
  4. material_controls.dart
  5. material_progress_bar.dart
  6. player_with_controls.dart\

现在在所有这些文件中,您必须滚动到顶部并找到这一行

import 'package:video_player/video_player.dart';

并将其替换为

import 'package:ext_video_player/ext_video_player.dart';

请记住在 pubspec.yaml 中导入ext_video_player包。阅读这个包的说明,但基本上你可以提供一个 youtube 网址 VideoPlayer.network() 。我希望这能解决你的问题。如果您愿意,您也可以将 web-views 用于应用程序或 iframes 用于网站,但不推荐使用

于 2020-08-27T05:53:51.777 回答
1

由于运行时 Dart 包将被删除flutter clean,因此使用@Siddharth 答案,我分叉 Chewie 并根据@Siddharth 答案进行编辑(将 video_player 更改为 ext_video_player)。

您可以在 pubspec.yaml 中将 Chewie 更改为我的 git:

  chewie:
    git:
      url: https://github.com/azhar-rafiq/chewie/
于 2021-04-30T03:38:45.340 回答