首页 > 解决方案 > 当我滚动子 ListView Flutter 时,InviewNotifierList(父级)正在重建

问题描述

我正在尝试实现 Instagram reels UI,但是当我滚动评论列表时,Inview Notifier 列表会重建并在后台播放最初提供的视频并暂停当前视频。

Github 回购链接

我尝试过使用自动 keepAlive,也尝试过使用滚动控制器。但是没有什么能阻止父列表重建。

视频演示

标签: flutterlistview

解决方案


编辑 1,经过进一步检查,在videoAnimationTile.dart

删除 initState,并将所有逻辑移至didchangedependancies,如下所示:

 @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _controller = AnimationController(vsync: this, duration: Duration(milliseconds: 200));

    BetterPlayerConfiguration betterPlayerConfiguration = BetterPlayerConfiguration(
      fit: BoxFit.fill,
      aspectRatio: (9 / 16),
      //Turned visibility off of icons by setting value to false.
      controlsConfiguration: BetterPlayerControlsConfiguration(showControls: false),
    );

    //  Setting Up Data Source
    BetterPlayerDataSource dataSource = BetterPlayerDataSource(
      BetterPlayerDataSourceType.network,
      widget.url,
      cacheConfiguration: BetterPlayerCacheConfiguration(
          useCache: true,
          //We Had To Change these Settings.
          maxCacheSize: 2 * 1024 * 1024 * 1024,
          maxCacheFileSize: 50 * 1024 * 1024),
    );

    _betterPlayerController = BetterPlayerController(betterPlayerConfiguration);
    _betterPlayerController.setupDataSource(dataSource);
  }

并将您的观点更改为:

  child: InViewNotifierWidget(
   id: widget.url,
   builder: (BuildContext context, bool isInView, Widget child) {
if (isInView) {
_betterPlayerController.setLooping(true);
 _betterPlayerController.play();
   } else {
   _betterPlayerController.pause();
   }

这只会循环当前正在查看的视频,这首先导致了问题,它循环了所有已启动的内容。


问题解决了

https://drive.google.com/file/d/1QRx5bqWWk84RjouvtQO7CsEcOOjSohLl/view?usp=drivesdk


推荐阅读