如何在滚动时自动暂停视频/当播放器在屏幕上抖动时不可见

How to auto pause video when scrolling / when the player is not visible on screen in flutter

我正在使用名为 'flick video player' 的视频播放器。我可以使用默认功能很好地播放视频。当我向下滚动屏幕并且视频继续在后台播放时出现问题。当它不可见时,或者当用户导航到项目应用程序上的不同页面时,我想暂停它。

我正在使用的视频播放器 (flick_video_player) 依赖 video_player。

非常感谢您的回答。 问候

NotificationListener 包裹您的视频列表并听取用户是开始还是停止滚动。使用此值来播放或暂停您的视频。

编辑:误读了你的问题。一旦用户滚动,这将用于暂停。如果要检测视频是否在当前视图内,请查看ScrollablePositionedList

return NotificationListener(
  onNotification: (notificationInfo) {
    if (notificationInfo is ScrollStartNotification) {
      // Set a state value to indicate the user is scrolling
    }
    if (notificationInfo is ScrollEndNotification) {
      // Set a state value to indicate the user stopped scrolling
    }
    return true;
  },
  child: YourVideos(),
);

也许这个能见度检测器包可以提供帮助https://pub.dev/packages/visibility_detector

这正是您所需要的,inview_notifier_list:

InViewNotifierList(
  isInViewPortCondition:
      (double deltaTop, double deltaBottom, double vpHeight) {
    return deltaTop < (0.5 * vpHeight) && deltaBottom > (0.5 * vpHeight);
  },
  itemCount: 10,
  builder: (BuildContext context, int index) {
    return InViewNotifierWidget(
      id: '$index',
      builder: (BuildContext context, bool isInView, Widget child) {
        return Container(
          height: 250.0,
          color: isInView ? Colors.green : Colors.red,
          child: Text(
            isInView ? 'Is in view' : 'Not in view',
          ),
        );
      },
    );
  },
);

我想你可以使用能见度检测器来达到这个目的-

VisibilityDetector(
                            key: ObjectKey(flickManager),
                            onVisibilityChanged: (visibility){
                              if (visibility.visibleFraction == 0 && this.mounted) {
                                flickManager?.flickControlManager?.pause();//pausing  functionality 
                              }

                            },
                            child: Container(
                              child: AspectRatio(
                                aspectRatio: 1280/720,
                                child: FlickVideoPlayer(
                                    flickManager: flickManager
                                ),
                                /*VideoPlayer(
                                    video_controller
                                ),*/
                              ),
                            ),
                          ),

我正在做类似的事情。有关如何再次播放等更多信息,您可以参考此 repo-https://github.com/GeekyAnts/flick-video-player/tree/master/example/lib/feed_player

希望对您有所帮助!