首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何:停止ListView重建video_player小部件?

如何:停止ListView重建video_player小部件?
EN

Stack Overflow用户
提问于 2020-02-15 00:13:33
回答 1查看 1.8K关注 0票数 1

我已经设法在flutter-web上播放了一段视频,然而,当我在ListView中滚动视频时,它将重新构建/重新加载。

如何在滚动时停止重建video_player (在ListView中)?

对于冗长的代码示例,很抱歉..我不知道如何进一步压缩它。

任何帮助都是最好的!谢谢

代码语言:javascript
复制
import 'package:flutter/material.dart';
import '../../widgets/video/chewie_video.dart';
import 'package:video_player/video_player.dart';

class TestPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        children: <Widget>[
          Container(height: 1000),
          Center(
            child: ChewieVideo(
              videoPlayerController:
                  VideoPlayerController.asset('assets/video.mp4'),
            ),
          ),
          Container(height: 1000),
        ],
      ),
    );
  }
}
代码语言:javascript
复制
import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';

class ChewieVideo extends StatefulWidget {
  final VideoPlayerController videoPlayerController;
  final bool looping;

  ChewieVideo({
    @required this.videoPlayerController,
    this.looping,
    Key key,
  }) : super(key: key);

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

class _ChewieVideoState extends State<ChewieVideo> {
  ChewieController _chewieController;

  @override
  void initState() {
    super.initState();
    _chewieController = ChewieController(
      videoPlayerController: widget.videoPlayerController,
      autoInitialize: true,
      aspectRatio: 16 / 9,
      looping: widget.looping,
      errorBuilder: (context, errorMessage) {
        return Center(
          child: Text(
            errorMessage,
            style: TextStyle(color: Colors.white),
          ),
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Chewie(
        controller: _chewieController,
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    widget.videoPlayerController.dispose();
    _chewieController.dispose();
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-15 16:50:05

我不确定这是一个好的或者只是暂时的修复,但这就是我如何让它工作的……

如果您在ListView/CustomScrollView中使用,那么您需要调整这两个小部件中的任何一个的cacheExtent ...我已将我的设置为1000。

我不太确定发生了什么,但它是有效的..。

代码语言:javascript
复制
class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: primaryBlack,
      drawer: NavDrawer(),
      body: Scrollbar(
        child: CustomScrollView(
          cacheExtent: 1000,
          slivers: <Widget>[

...

这样做之后,chewie和video_player插件就不应该在ListView中重新构建/刷新

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60229908

复制
相关文章

相似问题

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