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"