如何在滚动时自动暂停视频/当播放器在屏幕上抖动时不可见
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
希望对您有所帮助!
我正在使用名为 '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
希望对您有所帮助!