Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 68d2223

Browse files
[video_player] Don't restart when scrubbing to end (#4488)
1 parent 1b8b8da commit 68d2223

File tree

4 files changed

+62
-2
lines changed

4 files changed

+62
-2
lines changed

packages/video_player/video_player/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 2.2.7
2+
3+
* Fixes a regression where dragging a [VideoProgressIndicator] while playing
4+
would restart playback from the start of the video.
5+
16
## 2.2.6
27

38
* Initialize player when size and duration become available on iOS

packages/video_player/video_player/lib/video_player.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,8 @@ class _VideoScrubberState extends State<_VideoScrubber> {
784784
seekToRelativePosition(details.globalPosition);
785785
},
786786
onHorizontalDragEnd: (DragEndDetails details) {
787-
if (_controllerWasPlaying) {
787+
if (_controllerWasPlaying &&
788+
controller.value.position != controller.value.duration) {
788789
controller.play();
789790
}
790791
},

packages/video_player/video_player/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: Flutter plugin for displaying inline video with other Flutter
33
widgets on Android, iOS, and web.
44
repository: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player
55
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
6-
version: 2.2.6
6+
version: 2.2.7
77

88
environment:
99
sdk: ">=2.14.0 <3.0.0"

packages/video_player/video_player/test/video_player_test.dart

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,60 @@ void main() {
478478
});
479479
});
480480

481+
group('scrubbing', () {
482+
testWidgets('restarts on release if already playing',
483+
(WidgetTester tester) async {
484+
final VideoPlayerController controller = VideoPlayerController.network(
485+
'https://127.0.0.1',
486+
);
487+
await controller.initialize();
488+
final progressWidget =
489+
VideoProgressIndicator(controller, allowScrubbing: true);
490+
491+
await tester.pumpWidget(Directionality(
492+
textDirection: TextDirection.ltr,
493+
child: progressWidget,
494+
));
495+
496+
await controller.play();
497+
expect(controller.value.isPlaying, isTrue);
498+
499+
final Rect progressRect = tester.getRect(find.byWidget(progressWidget));
500+
await tester.dragFrom(progressRect.center, Offset(1.0, 0.0));
501+
await tester.pumpAndSettle();
502+
503+
expect(controller.value.position, lessThan(controller.value.duration));
504+
expect(controller.value.isPlaying, isTrue);
505+
506+
await controller.pause();
507+
});
508+
509+
testWidgets('does not restart when dragging to end',
510+
(WidgetTester tester) async {
511+
final VideoPlayerController controller = VideoPlayerController.network(
512+
'https://127.0.0.1',
513+
);
514+
await controller.initialize();
515+
final progressWidget =
516+
VideoProgressIndicator(controller, allowScrubbing: true);
517+
518+
await tester.pumpWidget(Directionality(
519+
textDirection: TextDirection.ltr,
520+
child: progressWidget,
521+
));
522+
523+
await controller.play();
524+
expect(controller.value.isPlaying, isTrue);
525+
526+
final Rect progressRect = tester.getRect(find.byWidget(progressWidget));
527+
await tester.dragFrom(progressRect.center, progressRect.centerRight);
528+
await tester.pumpAndSettle();
529+
530+
expect(controller.value.position, controller.value.duration);
531+
expect(controller.value.isPlaying, isFalse);
532+
});
533+
});
534+
481535
group('caption', () {
482536
test('works when seeking', () async {
483537
final VideoPlayerController controller = VideoPlayerController.network(

0 commit comments

Comments
 (0)