From 1f93e5a8bc684126ba6c421189aa968cbbcd056e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Cotta?= Date: Fri, 19 Jul 2019 00:02:35 -0300 Subject: [PATCH 1/4] fix image picker plugin example --- packages/image_picker/example/lib/main.dart | 52 ++++++++++----------- packages/image_picker/pubspec.yaml | 2 +- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/packages/image_picker/example/lib/main.dart b/packages/image_picker/example/lib/main.dart index 066c12380b40..40a7bc0f589f 100755 --- a/packages/image_picker/example/lib/main.dart +++ b/packages/image_picker/example/lib/main.dart @@ -39,24 +39,26 @@ class _MyHomePageState extends State { VideoPlayerController _controller; String _retrieveDataError; + Future _playVideo(File file) async { + if (file != null && mounted) { + _controller = VideoPlayerController.file(file); + _controller.addListener(_onVideoControllerUpdate); + await _controller.setVolume(1.0); + await _controller.initialize(); + await _controller.setLooping(true); + await _controller.play(); + setState(() {}); + } + } + void _onImageButtonPressed(ImageSource source) async { if (_controller != null) { - _controller.setVolume(0.0); + await _controller.setVolume(0.0); _controller.removeListener(_onVideoControllerUpdate); } if (isVideo) { - ImagePicker.pickVideo(source: source).then((File file) { - if (file != null && mounted) { - setState(() { - _controller = VideoPlayerController.file(file) - ..addListener(_onVideoControllerUpdate) - ..setVolume(1.0) - ..initialize() - ..setLooping(true) - ..play(); - }); - } - }); + final File file = await ImagePicker.pickVideo(source: source); + await _playVideo(file); } else { try { _imageFile = await ImagePicker.pickImage(source: source); @@ -68,13 +70,14 @@ class _MyHomePageState extends State { } void _onVideoControllerUpdate() { - setState(() {}); + // setState(() {}); } @override void deactivate() { if (_controller != null) { _controller.setVolume(0.0); + _controller.pause(); _controller.removeListener(_onVideoControllerUpdate); } super.deactivate(); @@ -137,20 +140,15 @@ class _MyHomePageState extends State { return; } if (response.file != null) { - setState(() { - if (response.type == RetrieveType.video) { - isVideo = true; - _controller = VideoPlayerController.file(response.file) - ..addListener(_onVideoControllerUpdate) - ..setVolume(1.0) - ..initialize() - ..setLooping(true) - ..play(); - } else { - isVideo = false; + if (response.type == RetrieveType.video) { + isVideo = true; + await _playVideo(response.file); + } else { + isVideo = false; + setState(() { _imageFile = response.file; - } - }); + }); + } } else { _retrieveDataError = response.exception.code; } diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index 721e6abdfbeb..3b30be0e6250 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: sdk: flutter dev_dependencies: - video_player: 0.5.2 + video_player: 0.10.1+5 flutter_test: sdk: flutter From 787396f202ce9952f990f1c1b4a62bee0f1f8a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Cotta?= Date: Fri, 19 Jul 2019 00:05:33 -0300 Subject: [PATCH 2/4] update CHANGELOG.md and pubspec.yaml plugin version --- packages/image_picker/CHANGELOG.md | 4 ++++ packages/image_picker/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index 44c8cc9dd01e..f55fd630e178 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.0+18 + +* Fix video play in example and update video_player plugin dependency. + ## 0.6.0+17 * iOS: Fix a crash when user captures image from the camera with devices under iOS 11. diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index 3b30be0e6250..d14b1ed688e9 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -6,7 +6,7 @@ authors: - Rhodes Davis Jr. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker -version: 0.6.0+17 +version: 0.6.0+18 flutter: plugin: From 10f90e8c7fa5df71caeba09f30beb1bec2c01f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Cotta?= Date: Fri, 19 Jul 2019 21:49:47 -0300 Subject: [PATCH 3/4] removed unecessary setstate and properly dispose VideoController --- packages/image_picker/example/lib/main.dart | 49 ++++++++++----------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/packages/image_picker/example/lib/main.dart b/packages/image_picker/example/lib/main.dart index 40a7bc0f589f..9c9b019fbe05 100755 --- a/packages/image_picker/example/lib/main.dart +++ b/packages/image_picker/example/lib/main.dart @@ -41,8 +41,8 @@ class _MyHomePageState extends State { Future _playVideo(File file) async { if (file != null && mounted) { + await _disposeVideoController(); _controller = VideoPlayerController.file(file); - _controller.addListener(_onVideoControllerUpdate); await _controller.setVolume(1.0); await _controller.initialize(); await _controller.setLooping(true); @@ -54,7 +54,6 @@ class _MyHomePageState extends State { void _onImageButtonPressed(ImageSource source) async { if (_controller != null) { await _controller.setVolume(0.0); - _controller.removeListener(_onVideoControllerUpdate); } if (isVideo) { final File file = await ImagePicker.pickVideo(source: source); @@ -62,56 +61,50 @@ class _MyHomePageState extends State { } else { try { _imageFile = await ImagePicker.pickImage(source: source); + setState(() {}); } catch (e) { _pickImageError = e; } - setState(() {}); } } - void _onVideoControllerUpdate() { - // setState(() {}); - } - @override void deactivate() { if (_controller != null) { _controller.setVolume(0.0); _controller.pause(); - _controller.removeListener(_onVideoControllerUpdate); } super.deactivate(); } @override void dispose() { + _disposeVideoController(); + super.dispose(); + } + + Future _disposeVideoController() async { if (_controller != null) { - _controller.dispose(); + await _controller.dispose(); + _controller = null; } - super.dispose(); } - Widget _previewVideo(VideoPlayerController controller) { + Widget _previewVideo() { final Text retrieveError = _getRetrieveErrorWidget(); if (retrieveError != null) { return retrieveError; } - if (controller == null) { + if (_controller == null) { return const Text( 'You have not yet picked a video', textAlign: TextAlign.center, ); - } else if (controller.value.initialized) { - return Padding( - padding: const EdgeInsets.all(10.0), - child: AspectRatioVideo(controller), - ); - } else { - return const Text( - 'Error Loading Video', - textAlign: TextAlign.center, - ); } + return Padding( + padding: const EdgeInsets.all(10.0), + child: AspectRatioVideo(_controller), + ); } Widget _previewImage() { @@ -173,9 +166,7 @@ class _MyHomePageState extends State { textAlign: TextAlign.center, ); case ConnectionState.done: - return isVideo - ? _previewVideo(_controller) - : _previewImage(); + return isVideo ? _previewVideo() : _previewImage(); default: if (snapshot.hasError) { return Text( @@ -191,7 +182,7 @@ class _MyHomePageState extends State { } }, ) - : (isVideo ? _previewVideo(_controller) : _previewImage()), + : (isVideo ? _previewVideo() : _previewImage()), ), floatingActionButton: Column( mainAxisAlignment: MainAxisAlignment.end, @@ -287,6 +278,12 @@ class AspectRatioVideoState extends State { controller.addListener(_onVideoControllerUpdate); } + @override + void dispose() { + controller.removeListener(_onVideoControllerUpdate); + super.dispose(); + } + @override Widget build(BuildContext context) { if (initialized) { From c2265f4f2c5c0da79ce8ecc8c61e278e0d339daa Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 23 Jul 2019 10:15:19 -0700 Subject: [PATCH 4/4] update video player version for the example app --- packages/image_picker/example/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/example/pubspec.yaml b/packages/image_picker/example/pubspec.yaml index e8c45e60aee7..1f793d7aa91f 100755 --- a/packages/image_picker/example/pubspec.yaml +++ b/packages/image_picker/example/pubspec.yaml @@ -3,7 +3,7 @@ description: Demonstrates how to use the image_picker plugin. author: Flutter Team dependencies: - video_player: 0.5.2 + video_player: 0.10.1+5 flutter: sdk: flutter image_picker: