diff --git a/CHANGELOG.md b/CHANGELOG.md index f93fa86c1..d5c6e098a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,7 +37,7 @@ * ⬆️ Update 'provider' to 6.0.1 - fixes [#568](https://github.com/brianegan/chewie/issues/568) -* ⬆️ Update 'video_player' to 2.2.7 +* ⬆️ Update 'ext_video_player' to 2.2.7 * ⬆️ Update 'wakelock' to 0.5.6 * ⬆️ Update 'lint' to 1.7.2 * ⬆️ Update roadmap @@ -54,7 +54,7 @@ * 💡 add `showOptions` flag to show/hide the options-menu - Fixes: [#491](https://github.com/brianegan/chewie/issues/491) -* ⬆️ update `video_player` to 2.1.5 +* ⬆️ update `ext_video_player` to 2.1.5 * 🛠️ fix MaterialUI duration text (RichText) ## 1.2.0 @@ -135,7 +135,7 @@ ## 0.10.1 -* Update `video_player` dependecy (stable release) +* Update `ext_video_player` dependecy (stable release) ## 0.10.0 @@ -168,7 +168,7 @@ ## 0.9.6 - * Update to work with `video_player: ">=0.7.0 <0.11.0"` + * Update to work with `ext_video_player: ">=0.7.0 <0.11.0"` ## 0.9.5 @@ -177,7 +177,7 @@ ## 0.9.4 * Add overlay option to place a widget between the video and the controls - * Update to work with `video_player: ">=0.7.0 <0.10.0"` + * Update to work with `ext_video_player: ">=0.7.0 <0.10.0"` ## 0.9.3 @@ -199,7 +199,7 @@ ## 0.8.0 - * Update to work with `video_player: ">=0.7.0 <0.8.0` - Thanks @Sub6Resources + * Update to work with `ext_video_player: ">=0.7.0 <0.8.0` - Thanks @Sub6Resources * Preserves AspectRatio on FullScreen - Thanks @patrickb * Ability to start video in FullScreen - Thanks @miguelpruivo @@ -217,7 +217,7 @@ ## 0.6.0 - * Update to work with `video_player: ">=0.6.0 <0.7.0` + * Update to work with `ext_video_player: ">=0.6.0 <0.7.0` ## 0.5.1 @@ -225,11 +225,11 @@ ## 0.5.0 - * Update to work with `video_player: ">=0.5.0 <0.6.0` + * Update to work with `ext_video_player: ">=0.5.0 <0.6.0` ## 0.3.0 - * Update to work with `video_player: ">=0.2.0 <0.3.0` + * Update to work with `ext_video_player: ">=0.2.0 <0.3.0` * Add `showControls` option. You can use this to show / hide the controls * Move from `VideoProgressColors` to `ChewieProgressColors` for customization of the Chewie progress controls * Remove `progressColors` in favor of platform-specific customizations: `cupertinoProgressColors` and `materialProgressColors` to control diff --git a/README.md b/README.md index 76f8a8ba8..0f427eba6 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,13 @@ The video player for Flutter with a heart of gold. -The [`video_player`](https://pub.dartlang.org/packages/video_player) plugin provides low-level access to video playback. Chewie uses the `video_player` under the hood and wraps it in a friendly Material or Cupertino UI! +The [`ext_video_player`](https://pub.dartlang.org/packages/ext_video_player) plugin provides low-level access to video playback. Chewie uses the `ext_video_player` under the hood and wraps it in a friendly Material or Cupertino UI! ## Preview -| MaterialControls | MaterialDesktopControls | -| :--------------: | :---------------------: | -| ![](https://github.com/brianegan/chewie/raw/master/assets/MaterialControls.png) | ![](https://github.com/brianegan/chewie/raw/master/assets/MaterialDesktopControls.png) | +| MaterialControls | MaterialDesktopControls | +| :-----------------------------------------------------------------------------: | :------------------------------------------------------------------------------------: | +| ![](https://github.com/brianegan/chewie/raw/master/assets/MaterialControls.png) | ![](https://github.com/brianegan/chewie/raw/master/assets/MaterialDesktopControls.png) | ### CupertinoControls ![](https://github.com/brianegan/chewie/raw/master/assets/CupertinoControls.png) @@ -23,7 +23,7 @@ In your `pubspec.yaml` file within your Flutter Project: ```yaml dependencies: chewie: - video_player: + ext_video_player: ``` ## Use it @@ -222,7 +222,7 @@ final playerWidget = Chewie( ## iOS warning -The video_player plugin used by chewie will only work in iOS simulators if you are on flutter 1.26.0 or above. You may need to switch to the beta channel `flutter channel beta` +The ext_video_player plugin used by chewie will only work in iOS simulators if you are on flutter 1.26.0 or above. You may need to switch to the beta channel `flutter channel beta` Please refer to this [issue](https://github.com/flutter/flutter/issues/14647). diff --git a/analysis_options.yaml b/analysis_options.yaml index cc973b46d..5caedb2d2 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -11,3 +11,4 @@ linter: close_sinks: true sort_constructors_first: true sort_pub_dependencies: false + depend_on_referenced_packages: false diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml index 3f3b118b4..211bda92e 100644 --- a/example/analysis_options.yaml +++ b/example/analysis_options.yaml @@ -10,3 +10,4 @@ linter: rules: close_sinks: true sort_constructors_first: true + depend_on_referenced_packages: false diff --git a/example/lib/app/app.dart b/example/lib/app/app.dart index 84970d9af..ca2ad187d 100644 --- a/example/lib/app/app.dart +++ b/example/lib/app/app.dart @@ -1,8 +1,7 @@ import 'package:chewie/chewie.dart'; import 'package:chewie_example/app/theme.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/material.dart'; -// ignore: depend_on_referenced_packages -import 'package:video_player/video_player.dart'; class ChewieDemo extends StatefulWidget { const ChewieDemo({ @@ -174,7 +173,7 @@ class _ChewieDemoState extends State { child: Center( child: _chewieController != null && _chewieController! - .videoPlayerController.value.isInitialized + .videoPlayerController.value.initialized ? Chewie( controller: _chewieController!, ) diff --git a/lib/src/chewie_player.dart b/lib/src/chewie_player.dart index bffb4d2e9..a24c19e74 100644 --- a/lib/src/chewie_player.dart +++ b/lib/src/chewie_player.dart @@ -6,10 +6,10 @@ import 'package:chewie/src/models/options_translation.dart'; import 'package:chewie/src/models/subtitle_model.dart'; import 'package:chewie/src/notifiers/player_notifier.dart'; import 'package:chewie/src/player_with_controls.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; -import 'package:video_player/video_player.dart'; import 'package:wakelock/wakelock.dart'; typedef ChewieRoutePageBuilder = Widget Function( @@ -21,7 +21,7 @@ typedef ChewieRoutePageBuilder = Widget Function( /// A Video Player with Material and Cupertino skins. /// -/// `video_player` is pretty low level. Chewie wraps it in a friendly skin to +/// `ext_video_player` is pretty low level. Chewie wraps it in a friendly skin to /// make it easy to use! class Chewie extends StatefulWidget { const Chewie({ @@ -182,9 +182,10 @@ class ChewieState extends State { } void onEnterFullScreen() { - final videoWidth = widget.controller.videoPlayerController.value.size.width; + final videoWidth = + widget.controller.videoPlayerController.value.size!.width; final videoHeight = - widget.controller.videoPlayerController.value.size.height; + widget.controller.videoPlayerController.value.size!.height; SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []); @@ -522,7 +523,7 @@ class ChewieController extends ChangeNotifier { await videoPlayerController.setLooping(looping); if ((autoInitialize || autoPlay) && - !videoPlayerController.value.isInitialized) { + !videoPlayerController.value.initialized) { await videoPlayerController.initialize(); } @@ -535,7 +536,7 @@ class ChewieController extends ChangeNotifier { } if (startAt != null) { - await videoPlayerController.seekTo(startAt!); + await videoPlayerController.seekTo(startAt); } if (fullScreenByDefault) { diff --git a/lib/src/cupertino/cupertino_controls.dart b/lib/src/cupertino/cupertino_controls.dart index bd42dfab0..c04a21c7b 100644 --- a/lib/src/cupertino/cupertino_controls.dart +++ b/lib/src/cupertino/cupertino_controls.dart @@ -12,10 +12,10 @@ import 'package:chewie/src/helpers/utils.dart'; import 'package:chewie/src/models/option_item.dart'; import 'package:chewie/src/models/subtitle_model.dart'; import 'package:chewie/src/notifiers/index.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:video_player/video_player.dart'; class CupertinoControls extends StatefulWidget { const CupertinoControls({ @@ -343,7 +343,7 @@ class _CupertinoControlsState extends State } Widget _buildHitArea() { - final bool isFinished = _latestValue.position >= _latestValue.duration; + final bool isFinished = _latestValue.position >= _latestValue.duration!; final bool showPlayButton = widget.showPlayButton && !_latestValue.isPlaying && !_dragging; @@ -452,7 +452,7 @@ class _CupertinoControlsState extends State } Widget _buildRemaining(Color iconColor) { - final position = _latestValue.duration - _latestValue.position; + final position = _latestValue.duration! - _latestValue.position; return Padding( padding: const EdgeInsets.only(right: 12.0), @@ -718,7 +718,7 @@ class _CupertinoControlsState extends State } void _playPause() { - final isFinished = _latestValue.position >= _latestValue.duration; + final isFinished = _latestValue.position >= _latestValue.duration!; setState(() { if (controller.value.isPlaying) { @@ -728,7 +728,7 @@ class _CupertinoControlsState extends State } else { _cancelAndRestartTimer(); - if (!controller.value.isInitialized) { + if (!controller.value.initialized) { controller.initialize().then((_) { controller.play(); }); @@ -752,7 +752,7 @@ class _CupertinoControlsState extends State void _skipForward() { _cancelAndRestartTimer(); - final end = _latestValue.duration.inMilliseconds; + final end = _latestValue.duration!.inMilliseconds; final skip = (_latestValue.position + const Duration(seconds: 15)).inMilliseconds; controller.seekTo(Duration(milliseconds: math.min(skip, end))); diff --git a/lib/src/cupertino/cupertino_progress_bar.dart b/lib/src/cupertino/cupertino_progress_bar.dart index 8e14962bc..e28e37bef 100644 --- a/lib/src/cupertino/cupertino_progress_bar.dart +++ b/lib/src/cupertino/cupertino_progress_bar.dart @@ -1,8 +1,8 @@ import 'package:chewie/src/chewie_progress_colors.dart'; import 'package:chewie/src/progress_bar.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; -import 'package:video_player/video_player.dart'; class CupertinoVideoProgressBar extends StatelessWidget { CupertinoVideoProgressBar( diff --git a/lib/src/material/material_controls.dart b/lib/src/material/material_controls.dart index 3f94f57a0..23483ebb9 100644 --- a/lib/src/material/material_controls.dart +++ b/lib/src/material/material_controls.dart @@ -10,9 +10,9 @@ import 'package:chewie/src/material/widgets/playback_speed_dialog.dart'; import 'package:chewie/src/models/option_item.dart'; import 'package:chewie/src/models/subtitle_model.dart'; import 'package:chewie/src/notifiers/index.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:video_player/video_player.dart'; class MaterialControls extends StatefulWidget { const MaterialControls({ @@ -360,7 +360,7 @@ class _MaterialControlsState extends State } Widget _buildHitArea() { - final bool isFinished = _latestValue.position >= _latestValue.duration; + final bool isFinished = _latestValue.position >= _latestValue.duration!; final bool showPlayButton = widget.showPlayButton && !_dragging && !notifier.hideStuff; @@ -424,7 +424,7 @@ class _MaterialControlsState extends State text: '${formatDuration(position)} ', children: [ TextSpan( - text: '/ ${formatDuration(duration)}', + text: '/ ${formatDuration(duration!)}', style: TextStyle( fontSize: 14.0, color: Colors.white.withOpacity(.75), @@ -515,7 +515,7 @@ class _MaterialControlsState extends State } void _playPause() { - final isFinished = _latestValue.position >= _latestValue.duration; + final isFinished = _latestValue.position >= _latestValue.duration!; setState(() { if (controller.value.isPlaying) { @@ -525,7 +525,7 @@ class _MaterialControlsState extends State } else { _cancelAndRestartTimer(); - if (!controller.value.isInitialized) { + if (!controller.value.initialized) { controller.initialize().then((_) { controller.play(); }); diff --git a/lib/src/material/material_desktop_controls.dart b/lib/src/material/material_desktop_controls.dart index b56ab1357..58f590c5a 100644 --- a/lib/src/material/material_desktop_controls.dart +++ b/lib/src/material/material_desktop_controls.dart @@ -11,9 +11,9 @@ import 'package:chewie/src/material/widgets/playback_speed_dialog.dart'; import 'package:chewie/src/models/option_item.dart'; import 'package:chewie/src/models/subtitle_model.dart'; import 'package:chewie/src/notifiers/index.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:video_player/video_player.dart'; class MaterialDesktopControls extends StatefulWidget { const MaterialDesktopControls({ @@ -325,7 +325,7 @@ class _MaterialDesktopControlsState extends State } Widget _buildHitArea() { - final bool isFinished = _latestValue.position >= _latestValue.duration; + final bool isFinished = _latestValue.position >= _latestValue.duration!; final bool showPlayButton = widget.showPlayButton && !_dragging && !notifier.hideStuff; @@ -437,7 +437,7 @@ class _MaterialDesktopControlsState extends State final duration = _latestValue.duration; return Text( - '${formatDuration(position)} / ${formatDuration(duration)}', + '${formatDuration(position)} / ${formatDuration(duration!)}', style: const TextStyle( fontSize: 14.0, color: Colors.white, @@ -495,7 +495,7 @@ class _MaterialDesktopControlsState extends State } void _playPause() { - final isFinished = _latestValue.position >= _latestValue.duration; + final isFinished = _latestValue.position >= _latestValue.duration!; setState(() { if (controller.value.isPlaying) { @@ -505,7 +505,7 @@ class _MaterialDesktopControlsState extends State } else { _cancelAndRestartTimer(); - if (!controller.value.isInitialized) { + if (!controller.value.initialized) { controller.initialize().then((_) { controller.play(); }); diff --git a/lib/src/material/material_progress_bar.dart b/lib/src/material/material_progress_bar.dart index ebfee55b5..cde59bdf7 100644 --- a/lib/src/material/material_progress_bar.dart +++ b/lib/src/material/material_progress_bar.dart @@ -1,7 +1,7 @@ import 'package:chewie/src/chewie_progress_colors.dart'; import 'package:chewie/src/progress_bar.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/material.dart'; -import 'package:video_player/video_player.dart'; class MaterialVideoProgressBar extends StatelessWidget { MaterialVideoProgressBar( diff --git a/lib/src/player_with_controls.dart b/lib/src/player_with_controls.dart index f3c0120a7..57739a01b 100644 --- a/lib/src/player_with_controls.dart +++ b/lib/src/player_with_controls.dart @@ -1,9 +1,9 @@ import 'package:chewie/src/chewie_player.dart'; import 'package:chewie/src/helpers/adaptive_controls.dart'; import 'package:chewie/src/notifiers/index.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:video_player/video_player.dart'; class PlayerWithControls extends StatelessWidget { const PlayerWithControls({Key? key}) : super(key: key); diff --git a/lib/src/progress_bar.dart b/lib/src/progress_bar.dart index 1c6f51981..2734b8b7d 100644 --- a/lib/src/progress_bar.dart +++ b/lib/src/progress_bar.dart @@ -1,6 +1,6 @@ import 'package:chewie/src/chewie_progress_colors.dart'; +import 'package:ext_video_player/ext_video_player.dart'; import 'package:flutter/material.dart'; -import 'package:video_player/video_player.dart'; class VideoProgressBar extends StatefulWidget { VideoProgressBar( @@ -59,7 +59,7 @@ class _VideoProgressBarState extends State { final box = context.findRenderObject()! as RenderBox; final Offset tapPos = box.globalToLocal(globalPosition); final double relative = tapPos.dx / box.size.width; - final Duration position = controller.value.duration * relative; + final Duration position = controller.value.duration! * relative; controller.seekTo(position); } @@ -67,7 +67,7 @@ class _VideoProgressBarState extends State { Widget build(BuildContext context) { return GestureDetector( onHorizontalDragStart: (DragStartDetails details) { - if (!controller.value.isInitialized) { + if (!controller.value.initialized) { return; } _controllerWasPlaying = controller.value.isPlaying; @@ -78,7 +78,7 @@ class _VideoProgressBarState extends State { widget.onDragStart?.call(); }, onHorizontalDragUpdate: (DragUpdateDetails details) { - if (!controller.value.isInitialized) { + if (!controller.value.initialized) { return; } _seekToRelativePosition(details.globalPosition); @@ -93,7 +93,7 @@ class _VideoProgressBarState extends State { widget.onDragEnd?.call(); }, onTapDown: (TapDownDetails details) { - if (!controller.value.isInitialized) { + if (!controller.value.initialized) { return; } _seekToRelativePosition(details.globalPosition); @@ -153,16 +153,16 @@ class _ProgressBarPainter extends CustomPainter { ), colors.backgroundPaint, ); - if (!value.isInitialized) { + if (!value.initialized) { return; } final double playedPartPercent = - value.position.inMilliseconds / value.duration.inMilliseconds; + value.position.inMilliseconds / value.duration!.inMilliseconds; final double playedPart = playedPartPercent > 1 ? size.width : playedPartPercent * size.width; for (final DurationRange range in value.buffered) { - final double start = range.startFraction(value.duration) * size.width; - final double end = range.endFraction(value.duration) * size.width; + final double start = range.startFraction(value.duration!) * size.width; + final double end = range.endFraction(value.duration!) * size.width; canvas.drawRRect( RRect.fromRectAndRadius( Rect.fromPoints( diff --git a/pubspec.yaml b/pubspec.yaml index edc3199fd..1e4c881f0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: chewie description: A video player for Flutter with Cupertino and Material play controls -version: 1.3.1 +version: 1.3.5 homepage: https://github.com/fluttercommunity/chewie environment: @@ -12,9 +12,9 @@ dependencies: flutter: sdk: flutter provider: ^6.0.1 - video_player: ^2.2.7 wakelock: ^0.6.1+1 very_good_analysis: ^2.4.0 + ext_video_player: '>=0.1.2 <1.0.0' dev_dependencies: flutter_test: