首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当视频完成并显示用户单击重播图标时,重新播放视频。

当视频完成并显示用户单击重播图标时,重新播放视频。
EN

Stack Overflow用户
提问于 2020-08-19 05:49:33
回答 3查看 445关注 0票数 2

编辑:我刚开始学习颤振,我还有很多东西要学。现在,我很难找到重放视频的方法。我的目标是重播一个视频,当它完成,并显示一个重播图标供用户点击。这是我唯一进口的包。

代码语言:javascript
复制
import 'package:video_player/video_player.dart';
import 'package:flutter/material.dart';
代码语言:javascript
复制
 Widget _buildVideoPlay() {
    return Center(
      child: _controller.value.initialized ? _VideoStack() : Container(),
    );
  }

 Widget _VideoStack() {
    return Stack(
      children: [
        _VideoCore(),
        FlatButton(
          onPressed: () => setState(() {
            _controller.value.isPlaying ? _controller.initialize() : _controller.pause()
        }),
          child: Center(
            child: _controller.value.isPlaying
                ? Icon(Icons.pause, color: Colors.blue, size: 30.0)
                : Icon(Icons.play_arrow, color: Colors.blue, size: 30.0),
        ),
      ],
    );
  }

  Widget _VideoCore() {
    return Container(
      child: Center(
        child: AspectRatio(
          aspectRatio: _controller.value.aspectRatio,
          child: VideoPlayer(_controller),
        ),
      ),
    );
  }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-19 06:31:33

在这种情况下,如果当前位置的持续时间等于视频的持续时间,则将finishedPlaying设置为true。然后使用此布尔值显示重播按钮。

代码语言:javascript
复制
 bool finishedPlaying = false;
  @override
  void initState() {
    super.initState();
    _controller.addListener(() {
    setState(() {
        });
      if (_controller.value.duration == _controller.value.position) {
        setState(() {
          finishedPlaying = true;
        });
        
      }
    });
  }
代码语言:javascript
复制
FlatButton(
          onPressed: () => setState(() {
                if (finishedPlaying) {
                  _controller.play(); // Replay the video
                } else {
                  _controller.value.isPlaying
                      ? _controller.play()
                      : _controller.pause();
                }
              }),
          child: Center(
              child: finishedPlaying
                  ? Icon(Icons.replay, color: Colors.blue, size: 30.0)
                  : (_controller.value.isPlaying
                      ? Icon(Icons.pause, color: Colors.blue, size: 30.0)
                      : Icon(Icons.play_arrow,
                          color: Colors.blue, size: 30.0)))),
票数 2
EN

Stack Overflow用户

发布于 2020-08-19 07:59:27

我不是你的意思,你的回答是不是像循环?你可以试试这个

代码语言:javascript
复制
IconButton(
                        icon: Icon(
                          Icons.loop,
                          color: _controller.value.isLooping
                              ? Colors.green
                              : Colors.black,
                        ),
                        onPressed: () {
                          _controller.setLooping(!_controller.value.isLooping);
                        })
票数 0
EN

Stack Overflow用户

发布于 2022-10-10 17:44:40

代码语言:javascript
复制
bool isPlay = false;
bool finishedPlaying = false;

@override
void initState() {
super.initState();
videoPlayerController.addListener(() {
  setState(() {
  });
  if (videoPlayerController.value.duration == videoPlayerController.value.position) {
    setState(() {
      isPlay = false;
      finishedPlaying = true;
    });
  } else {
    setState(() {
      finishedPlaying = false;
    });
  }
});

}

代码语言:javascript
复制
Stack(
    children: [
      CachedVideoPlayer(videoPlayerController),
      Align(
        alignment: Alignment.center,
        child: IconButton(
          onPressed: () {
            if (finishedPlaying) {
              videoPlayerController.seekTo(Duration.zero);
              videoPlayerController.play(); // Replay the video
            }
            if (isPlay) {
              videoPlayerController.pause();
            } else {
              videoPlayerController.play();
            }
            setState(() {
              isPlay = !isPlay;
            });
          },
          icon: Icon(
            finishedPlaying
                ? Icons.replay
                : isPlay
                    ? Icons.pause_circle
                    : Icons.play_circle,
            size: 30,
          ),
        ),
      ),
    ],
  ),
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63480755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档