From 82ff24f1de6e837469ec7593e2d2fe2447721b4e Mon Sep 17 00:00:00 2001 From: Anurag Tyagi Date: Wed, 22 Nov 2023 17:58:45 +0530 Subject: [PATCH 1/3] feat(Video): added callback for VideoController --- lib/src/widgets/media/carousel.dart | 4 ++ lib/src/widgets/media/video.dart | 22 +++----- lib/src/widgets/post/post_media.dart | 4 ++ pubspec.lock | 82 +++------------------------- pubspec.yaml | 1 - 5 files changed, 24 insertions(+), 89 deletions(-) diff --git a/lib/src/widgets/media/carousel.dart b/lib/src/widgets/media/carousel.dart index e123f87..6c883ed 100644 --- a/lib/src/widgets/media/carousel.dart +++ b/lib/src/widgets/media/carousel.dart @@ -4,9 +4,11 @@ import 'package:likeminds_feed/likeminds_feed.dart'; import 'package:likeminds_feed_ui_fl/src/utils/theme.dart'; import 'package:likeminds_feed_ui_fl/src/widgets/media/image.dart'; import 'package:likeminds_feed_ui_fl/src/widgets/media/video.dart'; +import 'package:media_kit_video/media_kit_video.dart'; class LMCarousel extends StatefulWidget { final List attachments; + final Function(VideoController)? initialiseVideoController; final double? height; final double? width; @@ -40,6 +42,7 @@ class LMCarousel extends StatefulWidget { this.inactiveIndicatorColor, this.errorWidget, this.boxFit, + this.initialiseVideoController, }) : super(key: key); @override @@ -85,6 +88,7 @@ class _LMCarouselState extends State { width: MediaQuery.of(context).size.width, child: widget.videoItem ?? LMVideo( + initialiseVideoController: widget.initialiseVideoController, videoUrl: e.attachmentMeta.url, width: widget.width, height: widget.height, diff --git a/lib/src/widgets/media/video.dart b/lib/src/widgets/media/video.dart index ff5651c..41a5f4d 100644 --- a/lib/src/widgets/media/video.dart +++ b/lib/src/widgets/media/video.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:io'; -// import 'package:flick_video_player/flick_video_player.dart'; import 'package:flutter/material.dart'; import 'package:likeminds_feed_ui_fl/likeminds_feed_ui_fl.dart'; import 'package:likeminds_feed_ui_fl/src/utils/theme.dart'; @@ -12,7 +11,6 @@ import 'package:media_kit_video/media_kit_video.dart'; import 'package:visibility_detector/visibility_detector.dart'; import 'package:media_kit_video/media_kit_video_controls/media_kit_video_controls.dart' as media_kit_video_controls; -import 'package:visibility_aware_state/visibility_aware_state.dart'; class LMVideo extends StatefulWidget { // late final LMVideo? _instance; @@ -43,12 +41,15 @@ class LMVideo extends StatefulWidget { this.progressTextStyle, this.seekBarBufferColor, this.seekBarColor, + this.initialiseVideoController, }) : assert(videoUrl != null || videoFile != null); //Video asset variables final String? videoUrl; final File? videoFile; + final Function(VideoController)? initialiseVideoController; + // Video structure variables final double? height; final double? width; @@ -81,7 +82,7 @@ class LMVideo extends StatefulWidget { State createState() => _LMVideoState(); } -class _LMVideoState extends VisibilityAwareState { +class _LMVideoState extends State { ValueNotifier rebuildOverlay = ValueNotifier(false); bool _onTouch = true; bool initialiseOverlay = false; @@ -108,17 +109,6 @@ class _LMVideoState extends VisibilityAwareState { initialiseController = initialiseControllers(); } - @override - void onVisibilityChanged(WidgetVisibility visibility) { - // TODO: Use visibility - if (visibility == WidgetVisibility.INVISIBLE) { - controller?.player.pause(); - } else if (visibility == WidgetVisibility.GONE) { - controller?.player.pause(); - } - super.onVisibilityChanged(visibility); - } - @override void initState() { super.initState(); @@ -141,6 +131,9 @@ class _LMVideoState extends VisibilityAwareState { scale: 0.2, ), ); + if(widget.initialiseVideoController != null){ + widget.initialiseVideoController!(controller!); + } if (widget.videoUrl != null) { await player.open( Media(widget.videoUrl!), @@ -177,7 +170,6 @@ class _LMVideoState extends VisibilityAwareState { return Stack(children: [ VisibilityDetector( key: ObjectKey(player), - //Key('post_video_${widget.videoUrl ?? widget.videoFile}'), onVisibilityChanged: (visibilityInfo) async { var visiblePercentage = visibilityInfo.visibleFraction * 100; diff --git a/lib/src/widgets/post/post_media.dart b/lib/src/widgets/post/post_media.dart index d8df8a4..7b539b4 100644 --- a/lib/src/widgets/post/post_media.dart +++ b/lib/src/widgets/post/post_media.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:likeminds_feed/likeminds_feed.dart'; import 'package:likeminds_feed_ui_fl/likeminds_feed_ui_fl.dart'; +import 'package:media_kit_video/media_kit_video.dart'; import 'package:url_launcher/url_launcher.dart'; class LMPostMedia extends StatefulWidget { @@ -21,9 +22,11 @@ class LMPostMedia extends StatefulWidget { this.errorWidget, this.boxFit, this.textColor, + this.initialiseVideoController, }); final List attachments; + final Function(VideoController)? initialiseVideoController; final Widget? documentIcon; final double? borderRadius; final double? width; @@ -87,6 +90,7 @@ class _LMPostMediaState extends State { ); } else { return LMCarousel( + initialiseVideoController: widget.initialiseVideoController, attachments: attachments!, borderRadius: widget.borderRadius, activeIndicatorColor: widget.carouselActiveIndicatorColor, diff --git a/pubspec.lock b/pubspec.lock index 178cf7a..d72a250 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -69,7 +69,7 @@ packages: dependency: "direct main" description: name: cached_network_image - sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + sha256: f98972704692ba679db144261172a8e20feb145636c617af0eb4022132a6797f url: "https://pub.dev" source: hosted version: "3.3.0" @@ -77,18 +77,18 @@ packages: dependency: transitive description: name: cached_network_image_platform_interface - sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + sha256: "56aa42a7a01e3c9db8456d9f3f999931f1e05535b5a424271e9a38cabf066613" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "3.0.0" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + sha256: "759b9a9f8f6ccbb66c185df805fac107f05730b1dab9c64626d1008cca532257" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.0" carousel_slider: dependency: "direct main" description: @@ -145,14 +145,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" curl_logger_dio_interceptor: dependency: transitive description: @@ -246,14 +238,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_blurhash: - dependency: transitive - description: - name: flutter_blurhash - sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" - url: "https://pub.dev" - source: hosted - version: "0.7.0" flutter_cache_manager: dependency: transitive description: @@ -312,14 +296,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" http: dependency: "direct main" description: @@ -388,10 +364,10 @@ packages: dependency: "direct main" description: name: likeminds_feed - sha256: f630ed3d36002bb67f9eacf3016a8e7deee942f0ee76b932a9135abe4e686d06 + sha256: e47b77e3eadfc475cd62e9bc1ea9c76fb64b5a3dc9cdb548782b06423f7c8e28 url: "https://pub.dev" source: hosted - version: "1.4.1" + version: "1.6.3" lints: dependency: transitive description: @@ -508,10 +484,10 @@ packages: dependency: transitive description: name: octo_image - sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "2.0.0" open_filex: dependency: "direct main" description: @@ -965,46 +941,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - video_player: - dependency: "direct main" - description: - name: video_player - sha256: d3910a8cefc0de8a432a4411dcf85030e885d8fef3ddea291f162253a05dbf01 - url: "https://pub.dev" - source: hosted - version: "2.7.1" - video_player_android: - dependency: transitive - description: - name: video_player_android - sha256: "3fe89ab07fdbce786e7eb25b58532d6eaf189ceddc091cb66cba712f8d9e8e55" - url: "https://pub.dev" - source: hosted - version: "2.4.10" - video_player_avfoundation: - dependency: transitive - description: - name: video_player_avfoundation - sha256: c3b123a5a56c9812b9029f840c65b92fd65083eb08d69be016b01e8aa018f77d - url: "https://pub.dev" - source: hosted - version: "2.4.10" - video_player_platform_interface: - dependency: transitive - description: - name: video_player_platform_interface - sha256: be72301bf2c0150ab35a8c34d66e5a99de525f6de1e8d27c0672b836fe48f73a - url: "https://pub.dev" - source: hosted - version: "6.2.1" - video_player_web: - dependency: transitive - description: - name: video_player_web - sha256: "9c34a243785feca23148bfcd772dbb803d63c9304488177ec4f3f4463802fcb7" - url: "https://pub.dev" - source: hosted - version: "2.0.17" visibility_detector: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index d687414..5aa75e8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,7 +26,6 @@ dependencies: media_kit: ^1.1.7 # Primary package. media_kit_video: ^1.1.8 # For video rendering. media_kit_libs_video: ^1.0.1 - visibility_aware_state: 1.0.5 likeminds_feed: 1.6.3 # path: ../LikeMinds-Flutter-Feed-SDK From 9f4c5d6a5fedec41b38b121fe78a4dcef61bf99a Mon Sep 17 00:00:00 2001 From: Anurag Tyagi Date: Wed, 22 Nov 2023 19:45:02 +0530 Subject: [PATCH 2/3] fixed visibility aware function --- lib/src/widgets/media/video.dart | 19 ++++++++++++++++--- pubspec.yaml | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/src/widgets/media/video.dart b/lib/src/widgets/media/video.dart index 41a5f4d..306ec2d 100644 --- a/lib/src/widgets/media/video.dart +++ b/lib/src/widgets/media/video.dart @@ -8,6 +8,7 @@ import 'package:likeminds_feed_ui_fl/src/widgets/common/buttons/icon_button.dart import 'package:likeminds_feed_ui_fl/src/widgets/common/shimmer/post_shimmer.dart'; import 'package:media_kit/media_kit.dart'; import 'package:media_kit_video/media_kit_video.dart'; +import 'package:visibility_aware_state/visibility_aware_state.dart'; import 'package:visibility_detector/visibility_detector.dart'; import 'package:media_kit_video/media_kit_video_controls/media_kit_video_controls.dart' as media_kit_video_controls; @@ -82,7 +83,7 @@ class LMVideo extends StatefulWidget { State createState() => _LMVideoState(); } -class _LMVideoState extends State { +class _LMVideoState extends VisibilityAwareState { ValueNotifier rebuildOverlay = ValueNotifier(false); bool _onTouch = true; bool initialiseOverlay = false; @@ -115,6 +116,18 @@ class _LMVideoState extends State { initialiseController = initialiseControllers(); } + @override + void onVisibilityChanged(WidgetVisibility visibility) { + // TODO: Use visibility + if (visibility == WidgetVisibility.INVISIBLE) { + controller?.player.pause(); + } else if (visibility == WidgetVisibility.GONE) { + controller?.player.pause(); + } + super.onVisibilityChanged(visibility); + } + + Future initialiseControllers() async { player = Player( configuration: PlayerConfiguration( @@ -173,10 +186,10 @@ class _LMVideoState extends State { onVisibilityChanged: (visibilityInfo) async { var visiblePercentage = visibilityInfo.visibleFraction * 100; - if (visiblePercentage < 100) { + if (visiblePercentage <= 70) { controller?.player.pause(); } - if (visiblePercentage == 100) { + if (visiblePercentage > 70) { controller?.player.play(); rebuildOverlay.value = !rebuildOverlay.value; } diff --git a/pubspec.yaml b/pubspec.yaml index 5aa75e8..d687414 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,6 +26,7 @@ dependencies: media_kit: ^1.1.7 # Primary package. media_kit_video: ^1.1.8 # For video rendering. media_kit_libs_video: ^1.0.1 + visibility_aware_state: 1.0.5 likeminds_feed: 1.6.3 # path: ../LikeMinds-Flutter-Feed-SDK From a5d272e45f9c6ec9c9491a1c983ee26a4c41ff00 Mon Sep 17 00:00:00 2001 From: Anurag Tyagi Date: Wed, 22 Nov 2023 20:18:41 +0530 Subject: [PATCH 3/3] chore(Version): update to v1.3.8 --- example/pubspec.yaml | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/example/pubspec.yaml b/example/pubspec.yaml index de03c97..628e17a 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.3.7 +version: 1.3.8 environment: sdk: '>=3.0.0 <4.0.0' diff --git a/pubspec.yaml b/pubspec.yaml index d687414..aa1c175 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: likeminds_feed_ui_fl description: A Flutter package for Likeminds Feed UI widgets. Used alongside the Likeminds Feed SDK package (likeminds_feed) to build custom interfaces. -version: 1.3.7 +version: 1.3.8 publish_to: none homepage: "www.likeminds.community/"