首页 > 解决方案 > 退出App后如何防止视频播放器出现白屏?

问题描述

我正在尝试从我的资产文件在我的应用程序中播放视频。我正在使用 video_player 包进行颤动。没有做任何特别的事情,只是从“flutter.dev”复制了他们的实现,所以我不会用代码让你厌烦。

但是,我的问题是,我注意到当我退出应用程序(或切换到另一个应用程序,基本上是在应用程序处于后台时)并再次打开它时,视频播放器变成白屏,我必须按下播放再次按钮 (FloatingActionButton) 使其恢复。

关于如何防止这种情况的任何想法?我正在物理 Iphone X 上运行该应用程序

这就是我的 video_player 在 Home_Screen 上的显示方式:

@override
  Widget build(BuildContext context) {
    return Container(
      child: Stack(
        children: <Widget>[
          FutureBuilder(
            future: _initializeVideoPlayerFuture,
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                return AspectRatio(
                  aspectRatio: 16 / 9,
                  child: VideoPlayer(_controller),
                );
              } else {
                return Center(child: CircularProgressIndicator());
              }
            },
          ),
          Positioned(
            bottom: 20.0,
            child: Padding(
              padding: const EdgeInsets.only(left: 8.0),
              child: FloatingActionButton(
                onPressed: () {
                  setState(() {
                    if (_controller.value.isPlaying) {
                      _controller.pause();
                    } else {
                      _controller.play();
                    }
                  });
                },
                child: Icon(
                  _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }

谢谢

标签: flutter

解决方案


在使用视频播放器包时,我遇到了同样的问题。您是否正在检查资源是否真正加载?检查_controller.value.isInitialized您的构建方法。

像这样的东西:

    @覆盖
  小部件构建(BuildContext 上下文){
    返回容器(
      孩子:堆栈(
        孩子们: [
          未来建造者(
            未来:_initializeVideoPlayerFuture,
            构建器:(上下文,快照){
              if (snapshot.connectionState == ConnectionState.done) {
                var videoLoaded = _controller.value.isInitialized;
                var widget = videoLoaded
                    ? 纵横比(
                        纵横比:16 / 9,
                        孩子:视频播放器(_controller))
                    :容器(孩子:(文本(“正在加载”)));
                返回小部件;              
              } 别的 {
                返回中心(子:CircularProgressIndicator());
              }
            },
          ),
          定位(
            底部:20.0,
            孩子:填充(
              填充:const EdgeInsets.only(左:8.0),
              孩子:浮动动作按钮(
                按下:(){
                  设置状态((){
                    如果(_controller.value.isPlaying){
                      _controller.pause();
                    } 别的 {
                      _controller.play();
                    }
                  });
                },
                孩子:图标(
                  _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }


推荐阅读