diff --git a/packages/video_player_videohole/CHANGELOG.md b/packages/video_player_videohole/CHANGELOG.md
index 198c8744f..d9f4eca18 100644
--- a/packages/video_player_videohole/CHANGELOG.md
+++ b/packages/video_player_videohole/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.6.1
+
+* Fix a "used after being disposed" error when a seek, position, or duration update completes after the controller is disposed.
+* Fix multi-line WebVTT cues without an identifier being dropped.
+
## 0.6.0
* Migrate from Platform Channels to Dart FFI.
diff --git a/packages/video_player_videohole/README.md b/packages/video_player_videohole/README.md
index d0b628a9b..12a024f52 100644
--- a/packages/video_player_videohole/README.md
+++ b/packages/video_player_videohole/README.md
@@ -12,7 +12,7 @@ To use this package, add `video_player_videohole` as a dependency in your `pubsp
```yaml
dependencies:
- video_player_videohole: ^0.6.0
+ video_player_videohole: ^0.6.1
```
Then you can import `video_player_videohole` in your Dart code:
diff --git a/packages/video_player_videohole/lib/src/web_vtt.dart b/packages/video_player_videohole/lib/src/web_vtt.dart
index 273d6c701..d74f9ea47 100644
--- a/packages/video_player_videohole/lib/src/web_vtt.dart
+++ b/packages/video_player_videohole/lib/src/web_vtt.dart
@@ -48,8 +48,8 @@ List
_parseCaptionsFromWebVTTString(String file) {
continue;
}
- // Caption has header
- final bool hasHeader = captionLines.length > 2;
+ // See: https://www.w3.org/TR/webvtt1/#webvtt-cue-identifier for valid cue identifier
+ final bool hasHeader = !captionLines[0].contains(_webVTTArrow);
if (hasHeader) {
final int? tryParseCaptionNumber = int.tryParse(captionLines[0]);
if (tryParseCaptionNumber != null) {
diff --git a/packages/video_player_videohole/lib/video_player.dart b/packages/video_player_videohole/lib/video_player.dart
index 8542b07ec..9d72ee7e0 100644
--- a/packages/video_player_videohole/lib/video_player.dart
+++ b/packages/video_player_videohole/lib/video_player.dart
@@ -574,6 +574,9 @@ class VideoPlayerController extends ValueNotifier {
Future play() async {
if (value.position == value.duration.end) {
await seekTo(Duration.zero);
+ if (_isDisposed) {
+ return;
+ }
}
value = value.copyWith(isPlaying: true);
await _applyPlayPause();
@@ -844,6 +847,9 @@ class VideoPlayerController extends ValueNotifier {
}
void _updatePosition(Duration position) {
+ if (_isDisposed) {
+ return;
+ }
value = value.copyWith(
position: position,
caption: _getCaptionAt(position),
@@ -852,6 +858,9 @@ class VideoPlayerController extends ValueNotifier {
}
void _updateDuration(DurationRange duration) {
+ if (_isDisposed) {
+ return;
+ }
value = value.copyWith(duration: duration);
}
diff --git a/packages/video_player_videohole/pubspec.yaml b/packages/video_player_videohole/pubspec.yaml
index 2a6cbf1c9..65fdb7b09 100644
--- a/packages/video_player_videohole/pubspec.yaml
+++ b/packages/video_player_videohole/pubspec.yaml
@@ -2,7 +2,7 @@ name: video_player_videohole
description: Flutter plugin for displaying inline video on Tizen TV devices.
homepage: https://github.com/flutter-tizen/plugins
repository: https://github.com/flutter-tizen/plugins/tree/main/packages/video_player_videohole
-version: 0.6.0
+version: 0.6.1
environment:
sdk: ">=3.1.0 <4.0.0"