✨ Able to play music
This commit is contained in:
		| @@ -22,7 +22,8 @@ | |||||||
|         android:label="Solian" |         android:label="Solian" | ||||||
|         android:name="${applicationName}" |         android:name="${applicationName}" | ||||||
|         android:icon="@mipmap/ic_launcher" |         android:icon="@mipmap/ic_launcher" | ||||||
|         android:supportsRtl="true"> |         android:supportsRtl="true" | ||||||
|  |         android:usesCleartextTraffic="true"> | ||||||
|         <receiver android:exported="false" |         <receiver android:exported="false" | ||||||
|             android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" /> |             android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" /> | ||||||
|         <receiver android:exported="false" |         <receiver android:exported="false" | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
| PODS: | PODS: | ||||||
|  |   - audio_session (0.0.1): | ||||||
|  |     - Flutter | ||||||
|   - connectivity_plus (0.0.1): |   - connectivity_plus (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - FlutterMacOS |     - FlutterMacOS | ||||||
| @@ -221,15 +223,11 @@ PODS: | |||||||
|     - TOCropViewController (~> 2.7.4) |     - TOCropViewController (~> 2.7.4) | ||||||
|   - image_picker_ios (0.0.1): |   - image_picker_ios (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|  |   - just_audio (0.0.1): | ||||||
|  |     - Flutter | ||||||
|   - livekit_client (2.2.4): |   - livekit_client (2.2.4): | ||||||
|     - Flutter |     - Flutter | ||||||
|     - WebRTC-SDK (= 125.6422.04) |     - WebRTC-SDK (= 125.6422.04) | ||||||
|   - media_kit_libs_ios_video (1.0.4): |  | ||||||
|     - Flutter |  | ||||||
|   - media_kit_native_event_loop (1.0.0): |  | ||||||
|     - Flutter |  | ||||||
|   - media_kit_video (0.0.1): |  | ||||||
|     - Flutter |  | ||||||
|   - nanopb (3.30910.0): |   - nanopb (3.30910.0): | ||||||
|     - nanopb/decode (= 3.30910.0) |     - nanopb/decode (= 3.30910.0) | ||||||
|     - nanopb/encode (= 3.30910.0) |     - nanopb/encode (= 3.30910.0) | ||||||
| @@ -251,8 +249,6 @@ PODS: | |||||||
|     - PromisesObjC (= 2.4.0) |     - PromisesObjC (= 2.4.0) | ||||||
|   - protocol_handler_ios (0.0.1): |   - protocol_handler_ios (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - screen_brightness_ios (0.1.0): |  | ||||||
|     - Flutter |  | ||||||
|   - SDWebImage (5.19.7): |   - SDWebImage (5.19.7): | ||||||
|     - SDWebImage/Core (= 5.19.7) |     - SDWebImage/Core (= 5.19.7) | ||||||
|   - SDWebImage/Core (5.19.7) |   - SDWebImage/Core (5.19.7) | ||||||
| @@ -268,13 +264,15 @@ PODS: | |||||||
|   - TOCropViewController (2.7.4) |   - TOCropViewController (2.7.4) | ||||||
|   - url_launcher_ios (0.0.1): |   - url_launcher_ios (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - volume_controller (0.0.1): |   - video_player_avfoundation (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|  |     - FlutterMacOS | ||||||
|   - wakelock_plus (0.0.1): |   - wakelock_plus (0.0.1): | ||||||
|     - Flutter |     - Flutter | ||||||
|   - WebRTC-SDK (125.6422.04) |   - WebRTC-SDK (125.6422.04) | ||||||
|  |  | ||||||
| DEPENDENCIES: | DEPENDENCIES: | ||||||
|  |   - audio_session (from `.symlinks/plugins/audio_session/ios`) | ||||||
|   - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) |   - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) | ||||||
|   - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) |   - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) | ||||||
|   - file_picker (from `.symlinks/plugins/file_picker/ios`) |   - file_picker (from `.symlinks/plugins/file_picker/ios`) | ||||||
| @@ -291,22 +289,19 @@ DEPENDENCIES: | |||||||
|   - gal (from `.symlinks/plugins/gal/darwin`) |   - gal (from `.symlinks/plugins/gal/darwin`) | ||||||
|   - image_cropper (from `.symlinks/plugins/image_cropper/ios`) |   - image_cropper (from `.symlinks/plugins/image_cropper/ios`) | ||||||
|   - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) |   - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) | ||||||
|  |   - just_audio (from `.symlinks/plugins/just_audio/ios`) | ||||||
|   - livekit_client (from `.symlinks/plugins/livekit_client/ios`) |   - livekit_client (from `.symlinks/plugins/livekit_client/ios`) | ||||||
|   - media_kit_libs_ios_video (from `.symlinks/plugins/media_kit_libs_ios_video/ios`) |  | ||||||
|   - media_kit_native_event_loop (from `.symlinks/plugins/media_kit_native_event_loop/ios`) |  | ||||||
|   - media_kit_video (from `.symlinks/plugins/media_kit_video/ios`) |  | ||||||
|   - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) |   - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) | ||||||
|   - pasteboard (from `.symlinks/plugins/pasteboard/ios`) |   - pasteboard (from `.symlinks/plugins/pasteboard/ios`) | ||||||
|   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) |   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) | ||||||
|   - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) |   - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) | ||||||
|   - pointer_interceptor_ios (from `.symlinks/plugins/pointer_interceptor_ios/ios`) |   - pointer_interceptor_ios (from `.symlinks/plugins/pointer_interceptor_ios/ios`) | ||||||
|   - protocol_handler_ios (from `.symlinks/plugins/protocol_handler_ios/ios`) |   - protocol_handler_ios (from `.symlinks/plugins/protocol_handler_ios/ios`) | ||||||
|   - screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`) |  | ||||||
|   - share_plus (from `.symlinks/plugins/share_plus/ios`) |   - share_plus (from `.symlinks/plugins/share_plus/ios`) | ||||||
|   - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) |   - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) | ||||||
|   - sqflite (from `.symlinks/plugins/sqflite/darwin`) |   - sqflite (from `.symlinks/plugins/sqflite/darwin`) | ||||||
|   - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) |   - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) | ||||||
|   - volume_controller (from `.symlinks/plugins/volume_controller/ios`) |   - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`) | ||||||
|   - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) |   - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) | ||||||
|  |  | ||||||
| SPEC REPOS: | SPEC REPOS: | ||||||
| @@ -339,6 +334,8 @@ SPEC REPOS: | |||||||
|     - WebRTC-SDK |     - WebRTC-SDK | ||||||
|  |  | ||||||
| EXTERNAL SOURCES: | EXTERNAL SOURCES: | ||||||
|  |   audio_session: | ||||||
|  |     :path: ".symlinks/plugins/audio_session/ios" | ||||||
|   connectivity_plus: |   connectivity_plus: | ||||||
|     :path: ".symlinks/plugins/connectivity_plus/darwin" |     :path: ".symlinks/plugins/connectivity_plus/darwin" | ||||||
|   device_info_plus: |   device_info_plus: | ||||||
| @@ -371,14 +368,10 @@ EXTERNAL SOURCES: | |||||||
|     :path: ".symlinks/plugins/image_cropper/ios" |     :path: ".symlinks/plugins/image_cropper/ios" | ||||||
|   image_picker_ios: |   image_picker_ios: | ||||||
|     :path: ".symlinks/plugins/image_picker_ios/ios" |     :path: ".symlinks/plugins/image_picker_ios/ios" | ||||||
|  |   just_audio: | ||||||
|  |     :path: ".symlinks/plugins/just_audio/ios" | ||||||
|   livekit_client: |   livekit_client: | ||||||
|     :path: ".symlinks/plugins/livekit_client/ios" |     :path: ".symlinks/plugins/livekit_client/ios" | ||||||
|   media_kit_libs_ios_video: |  | ||||||
|     :path: ".symlinks/plugins/media_kit_libs_ios_video/ios" |  | ||||||
|   media_kit_native_event_loop: |  | ||||||
|     :path: ".symlinks/plugins/media_kit_native_event_loop/ios" |  | ||||||
|   media_kit_video: |  | ||||||
|     :path: ".symlinks/plugins/media_kit_video/ios" |  | ||||||
|   package_info_plus: |   package_info_plus: | ||||||
|     :path: ".symlinks/plugins/package_info_plus/ios" |     :path: ".symlinks/plugins/package_info_plus/ios" | ||||||
|   pasteboard: |   pasteboard: | ||||||
| @@ -391,8 +384,6 @@ EXTERNAL SOURCES: | |||||||
|     :path: ".symlinks/plugins/pointer_interceptor_ios/ios" |     :path: ".symlinks/plugins/pointer_interceptor_ios/ios" | ||||||
|   protocol_handler_ios: |   protocol_handler_ios: | ||||||
|     :path: ".symlinks/plugins/protocol_handler_ios/ios" |     :path: ".symlinks/plugins/protocol_handler_ios/ios" | ||||||
|   screen_brightness_ios: |  | ||||||
|     :path: ".symlinks/plugins/screen_brightness_ios/ios" |  | ||||||
|   share_plus: |   share_plus: | ||||||
|     :path: ".symlinks/plugins/share_plus/ios" |     :path: ".symlinks/plugins/share_plus/ios" | ||||||
|   shared_preferences_foundation: |   shared_preferences_foundation: | ||||||
| @@ -401,12 +392,13 @@ EXTERNAL SOURCES: | |||||||
|     :path: ".symlinks/plugins/sqflite/darwin" |     :path: ".symlinks/plugins/sqflite/darwin" | ||||||
|   url_launcher_ios: |   url_launcher_ios: | ||||||
|     :path: ".symlinks/plugins/url_launcher_ios/ios" |     :path: ".symlinks/plugins/url_launcher_ios/ios" | ||||||
|   volume_controller: |   video_player_avfoundation: | ||||||
|     :path: ".symlinks/plugins/volume_controller/ios" |     :path: ".symlinks/plugins/video_player_avfoundation/darwin" | ||||||
|   wakelock_plus: |   wakelock_plus: | ||||||
|     :path: ".symlinks/plugins/wakelock_plus/ios" |     :path: ".symlinks/plugins/wakelock_plus/ios" | ||||||
|  |  | ||||||
| SPEC CHECKSUMS: | SPEC CHECKSUMS: | ||||||
|  |   audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207 | ||||||
|   connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db |   connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db | ||||||
|   device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d |   device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d | ||||||
|   DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c |   DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c | ||||||
| @@ -442,10 +434,8 @@ SPEC CHECKSUMS: | |||||||
|   GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d |   GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d | ||||||
|   image_cropper: 37d40f62177c101ff4c164906d259ea2c3aa70cf |   image_cropper: 37d40f62177c101ff4c164906d259ea2c3aa70cf | ||||||
|   image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 |   image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 | ||||||
|  |   just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa | ||||||
|   livekit_client: d079c5f040d4bf2b80440ff0ae997725a183e4bc |   livekit_client: d079c5f040d4bf2b80440ff0ae997725a183e4bc | ||||||
|   media_kit_libs_ios_video: a5fe24bc7875ccd6378a0978c13185e1344651c1 |  | ||||||
|   media_kit_native_event_loop: e6b2ab20cf0746eb1c33be961fcf79667304fa2a |  | ||||||
|   media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e |  | ||||||
|   nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 |   nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 | ||||||
|   package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c |   package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c | ||||||
|   pasteboard: 982969ebaa7c78af3e6cc7761e8f5e77565d9ce0 |   pasteboard: 982969ebaa7c78af3e6cc7761e8f5e77565d9ce0 | ||||||
| @@ -455,7 +445,6 @@ SPEC CHECKSUMS: | |||||||
|   PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 |   PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 | ||||||
|   PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 |   PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 | ||||||
|   protocol_handler_ios: a5db8abc38526ee326988b808be621e5fd568990 |   protocol_handler_ios: a5db8abc38526ee326988b808be621e5fd568990 | ||||||
|   screen_brightness_ios: 715ca807df953bf676d339f11464e438143ee625 |  | ||||||
|   SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 |   SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 | ||||||
|   share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad |   share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad | ||||||
|   shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 |   shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 | ||||||
| @@ -463,7 +452,7 @@ SPEC CHECKSUMS: | |||||||
|   SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 |   SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 | ||||||
|   TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 |   TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 | ||||||
|   url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe |   url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe | ||||||
|   volume_controller: 531ddf792994285c9b17f9d8a7e4dcdd29b3eae9 |   video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3 | ||||||
|   wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1 |   wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1 | ||||||
|   WebRTC-SDK: c3d69a87e7185fad3568f6f3cff7c9ac5890acf3 |   WebRTC-SDK: c3d69a87e7185fad3568f6f3cff7c9ac5890acf3 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,7 +6,6 @@ import 'package:flutter/material.dart'; | |||||||
| import 'package:flutter_acrylic/flutter_acrylic.dart'; | import 'package:flutter_acrylic/flutter_acrylic.dart'; | ||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
| import 'package:go_router/go_router.dart'; | import 'package:go_router/go_router.dart'; | ||||||
| import 'package:media_kit/media_kit.dart'; |  | ||||||
| import 'package:protocol_handler/protocol_handler.dart'; | import 'package:protocol_handler/protocol_handler.dart'; | ||||||
| import 'package:provider/provider.dart'; | import 'package:provider/provider.dart'; | ||||||
| import 'package:solian/bootstrapper.dart'; | import 'package:solian/bootstrapper.dart'; | ||||||
| @@ -35,7 +34,6 @@ import 'package:flutter_web_plugins/url_strategy.dart' show usePathUrlStrategy; | |||||||
|  |  | ||||||
| void main() async { | void main() async { | ||||||
|   WidgetsFlutterBinding.ensureInitialized(); |   WidgetsFlutterBinding.ensureInitialized(); | ||||||
|   MediaKit.ensureInitialized(); |  | ||||||
|  |  | ||||||
|   await Future.wait([ |   await Future.wait([ | ||||||
|     _initializeFirebase(), |     _initializeFirebase(), | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								lib/providers/durations.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								lib/providers/durations.dart
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | extension DurationToHumanReadableString on Duration { | ||||||
|  |   String toHumanReadableString({padZero = true}) { | ||||||
|  |     final mm = inMinutes | ||||||
|  |         .remainder(60) | ||||||
|  |         .toString() | ||||||
|  |         .padLeft(2, !padZero && inHours == 0 ? '' : '0'); | ||||||
|  |     final ss = inSeconds.remainder(60).toString().padLeft(2, '0'); | ||||||
|  |  | ||||||
|  |     if (inHours > 0) { | ||||||
|  |       final hh = inHours.toString().padLeft(2, !padZero ? '' : '0'); | ||||||
|  |       return '$hh:$mm:$ss'; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return '$mm:$ss'; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | extension ParseDuration on Duration { | ||||||
|  |   static Duration fromString(String duration) { | ||||||
|  |     final parts = duration.split(':').reversed.toList(); | ||||||
|  |     final seconds = int.parse(parts[0]); | ||||||
|  |     final minutes = parts.length > 1 ? int.parse(parts[1]) : 0; | ||||||
|  |     final hours = parts.length > 2 ? int.parse(parts[2]) : 0; | ||||||
|  |     return Duration(hours: hours, minutes: minutes, seconds: seconds); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -1,15 +1,20 @@ | |||||||
|  | import 'dart:math'; | ||||||
|  |  | ||||||
| import 'package:cached_network_image/cached_network_image.dart'; | import 'package:cached_network_image/cached_network_image.dart'; | ||||||
|  | import 'package:chewie/chewie.dart'; | ||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:flutter_animate/flutter_animate.dart'; | import 'package:flutter_animate/flutter_animate.dart'; | ||||||
| import 'package:gap/gap.dart'; | import 'package:gap/gap.dart'; | ||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
| import 'package:media_kit/media_kit.dart'; | import 'package:google_fonts/google_fonts.dart'; | ||||||
| import 'package:media_kit_video/media_kit_video.dart'; | import 'package:just_audio/just_audio.dart'; | ||||||
| import 'package:solian/models/attachment.dart'; | import 'package:solian/models/attachment.dart'; | ||||||
| import 'package:solian/platform.dart'; | import 'package:solian/platform.dart'; | ||||||
|  | import 'package:solian/providers/durations.dart'; | ||||||
| import 'package:solian/services.dart'; | import 'package:solian/services.dart'; | ||||||
| import 'package:solian/widgets/sized_container.dart'; | import 'package:solian/widgets/sized_container.dart'; | ||||||
| import 'package:url_launcher/url_launcher_string.dart'; | import 'package:url_launcher/url_launcher_string.dart'; | ||||||
|  | import 'package:video_player/video_player.dart'; | ||||||
|  |  | ||||||
| class AttachmentItem extends StatefulWidget { | class AttachmentItem extends StatefulWidget { | ||||||
|   final String parentId; |   final String parentId; | ||||||
| @@ -56,6 +61,11 @@ class _AttachmentItemState extends State<AttachmentItem> { | |||||||
|           item: widget.item, |           item: widget.item, | ||||||
|           autoload: widget.autoload, |           autoload: widget.autoload, | ||||||
|         ); |         ); | ||||||
|  |       case 'audio': | ||||||
|  |         return _AttachmentItemAudio( | ||||||
|  |           item: widget.item, | ||||||
|  |           autoload: widget.autoload, | ||||||
|  |         ); | ||||||
|       default: |       default: | ||||||
|         return Center( |         return Center( | ||||||
|           child: Container( |           child: Container( | ||||||
| @@ -240,22 +250,21 @@ class _AttachmentItemVideo extends StatefulWidget { | |||||||
| } | } | ||||||
|  |  | ||||||
| class _AttachmentItemVideoState extends State<_AttachmentItemVideo> { | class _AttachmentItemVideoState extends State<_AttachmentItemVideo> { | ||||||
|   late final _player = Player( |  | ||||||
|     configuration: const PlayerConfiguration( |  | ||||||
|       logLevel: MPVLogLevel.error, |  | ||||||
|     ), |  | ||||||
|   ); |  | ||||||
|  |  | ||||||
|   late final _controller = VideoController(_player); |  | ||||||
|  |  | ||||||
|   bool _showContent = false; |   bool _showContent = false; | ||||||
|  |  | ||||||
|  |   VideoPlayerController? _videoController; | ||||||
|  |   ChewieController? _chewieController; | ||||||
|  |  | ||||||
|   Future<void> _startLoad() async { |   Future<void> _startLoad() async { | ||||||
|     await _player.open( |  | ||||||
|       Media(ServiceFinder.buildUrl('files', '/attachments/${widget.item.rid}')), |  | ||||||
|       play: false, |  | ||||||
|     ); |  | ||||||
|     setState(() => _showContent = true); |     setState(() => _showContent = true); | ||||||
|  |     final url = | ||||||
|  |         ServiceFinder.buildUrl('files', '/attachments/${widget.item.rid}'); | ||||||
|  |     _videoController = VideoPlayerController.networkUrl(Uri.parse(url)); | ||||||
|  |     await _videoController!.initialize(); | ||||||
|  |     _chewieController = ChewieController( | ||||||
|  |       videoPlayerController: _videoController!, | ||||||
|  |       aspectRatio: widget.item.metadata?['ratio'], | ||||||
|  |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
| @@ -305,17 +314,237 @@ class _AttachmentItemVideoState extends State<_AttachmentItemVideo> { | |||||||
|           _startLoad(); |           _startLoad(); | ||||||
|         }, |         }, | ||||||
|       ); |       ); | ||||||
|  |     } else if (_chewieController == null) { | ||||||
|  |       return const Center( | ||||||
|  |         child: CircularProgressIndicator(), | ||||||
|  |       ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return Video( |     return Chewie(controller: _chewieController!); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   void dispose() { | ||||||
|  |     _chewieController?.dispose(); | ||||||
|  |     _videoController?.dispose(); | ||||||
|  |     super.dispose(); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _AttachmentItemAudio extends StatefulWidget { | ||||||
|  |   final Attachment item; | ||||||
|  |   final bool autoload; | ||||||
|  |  | ||||||
|  |   const _AttachmentItemAudio({ | ||||||
|  |     required this.item, | ||||||
|  |     this.autoload = false, | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   State<_AttachmentItemAudio> createState() => _AttachmentItemAudioState(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _AttachmentItemAudioState extends State<_AttachmentItemAudio> { | ||||||
|  |   bool _showContent = false; | ||||||
|  |  | ||||||
|  |   double? _draggingValue; | ||||||
|  |  | ||||||
|  |   AudioPlayer? _audioController; | ||||||
|  |  | ||||||
|  |   Future<void> _startLoad() async { | ||||||
|  |     setState(() => _showContent = true); | ||||||
|  |     final url = | ||||||
|  |         ServiceFinder.buildUrl('files', '/attachments/${widget.item.rid}'); | ||||||
|  |     _audioController = AudioPlayer(); | ||||||
|  |     // Platform that can cache image also capable to cache audio | ||||||
|  |     // https://pub.dev/packages/just_audio#experimental-features | ||||||
|  |     if (PlatformInfo.canCacheImage) { | ||||||
|  |       final source = LockCachingAudioSource(Uri.parse(url)); | ||||||
|  |       await _audioController!.setAudioSource(source); | ||||||
|  |     } else { | ||||||
|  |       await _audioController!.setUrl(url); | ||||||
|  |     } | ||||||
|  |     _audioController!.playingStream.listen((_) => setState(() {})); | ||||||
|  |     _audioController!.positionStream.listen((_) => setState(() {})); | ||||||
|  |     _audioController!.durationStream.listen((_) => setState(() {})); | ||||||
|  |     _audioController!.bufferedPositionStream.listen((_) => setState(() {})); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   void initState() { | ||||||
|  |     super.initState(); | ||||||
|  |     if (widget.autoload) { | ||||||
|  |       _startLoad(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     const ratio = 16 / 9; | ||||||
|  |     if (!_showContent) { | ||||||
|  |       return GestureDetector( | ||||||
|  |         child: AspectRatio( | ||||||
|  |           aspectRatio: ratio, | ||||||
|  |           child: CenteredContainer( | ||||||
|  |             maxWidth: 280, | ||||||
|  |             child: Column( | ||||||
|  |               mainAxisAlignment: MainAxisAlignment.center, | ||||||
|  |               children: [ | ||||||
|  |                 const Icon( | ||||||
|  |                   Icons.not_started, | ||||||
|  |                   color: Colors.white, | ||||||
|  |                   size: 32, | ||||||
|  |                 ), | ||||||
|  |                 const Gap(8), | ||||||
|  |                 Text( | ||||||
|  |                   'attachmentUnload'.tr, | ||||||
|  |                   style: const TextStyle( | ||||||
|  |                     color: Colors.white, | ||||||
|  |                     fontWeight: FontWeight.bold, | ||||||
|  |                     fontSize: 16, | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |                 Text( | ||||||
|  |                   'attachmentUnloadCaption'.tr, | ||||||
|  |                   style: const TextStyle(color: Colors.white), | ||||||
|  |                   textAlign: TextAlign.center, | ||||||
|  |                 ), | ||||||
|  |               ], | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |         ), | ||||||
|  |         onTap: () { | ||||||
|  |           _startLoad(); | ||||||
|  |         }, | ||||||
|  |       ); | ||||||
|  |     } else if (_audioController == null) { | ||||||
|  |       return const Center( | ||||||
|  |         child: CircularProgressIndicator(), | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return AspectRatio( | ||||||
|       aspectRatio: ratio, |       aspectRatio: ratio, | ||||||
|       controller: _controller, |       child: CenteredContainer( | ||||||
|  |         maxWidth: 320, | ||||||
|  |         child: Column( | ||||||
|  |           mainAxisAlignment: MainAxisAlignment.center, | ||||||
|  |           children: [ | ||||||
|  |             const Icon(Icons.audio_file, size: 32), | ||||||
|  |             const Gap(8), | ||||||
|  |             Text( | ||||||
|  |               widget.item.alt, | ||||||
|  |               style: const TextStyle(fontSize: 13), | ||||||
|  |               textAlign: TextAlign.center, | ||||||
|  |             ), | ||||||
|  |             const Gap(12), | ||||||
|  |             Row( | ||||||
|  |               children: [ | ||||||
|  |                 Expanded( | ||||||
|  |                   child: Column( | ||||||
|  |                     children: [ | ||||||
|  |                       SliderTheme( | ||||||
|  |                         data: SliderThemeData( | ||||||
|  |                           trackHeight: 2, | ||||||
|  |                           trackShape: _PlayerProgressTrackShape(), | ||||||
|  |                           thumbShape: const RoundSliderThumbShape( | ||||||
|  |                             enabledThumbRadius: 8, | ||||||
|  |                           ), | ||||||
|  |                           overlayShape: SliderComponentShape.noOverlay, | ||||||
|  |                         ), | ||||||
|  |                         child: Slider( | ||||||
|  |                           secondaryTrackValue: _audioController! | ||||||
|  |                               .bufferedPosition.inMilliseconds | ||||||
|  |                               .abs() | ||||||
|  |                               .toDouble(), | ||||||
|  |                           value: _draggingValue?.abs() ?? | ||||||
|  |                               _audioController!.position.inMilliseconds | ||||||
|  |                                   .toDouble() | ||||||
|  |                                   .abs(), | ||||||
|  |                           min: 0, | ||||||
|  |                           max: max( | ||||||
|  |                             _audioController!.bufferedPosition.inMilliseconds | ||||||
|  |                                 .abs(), | ||||||
|  |                             max( | ||||||
|  |                               _audioController!.position.inMilliseconds.abs(), | ||||||
|  |                               _audioController!.duration?.inMilliseconds | ||||||
|  |                                       .abs() ?? | ||||||
|  |                                   1, | ||||||
|  |                             ), | ||||||
|  |                           ).toDouble(), | ||||||
|  |                           onChanged: (value) { | ||||||
|  |                             setState(() => _draggingValue = value); | ||||||
|  |                           }, | ||||||
|  |                           onChangeEnd: (value) { | ||||||
|  |                             _audioController! | ||||||
|  |                                 .seek(Duration(milliseconds: value.toInt())); | ||||||
|  |                             setState(() => _draggingValue = null); | ||||||
|  |                           }, | ||||||
|  |                         ), | ||||||
|  |                       ), | ||||||
|  |                       Row( | ||||||
|  |                         mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                         children: [ | ||||||
|  |                           Text( | ||||||
|  |                             _audioController!.position.toHumanReadableString(), | ||||||
|  |                             style: GoogleFonts.robotoMono(fontSize: 12), | ||||||
|  |                           ), | ||||||
|  |                           Text( | ||||||
|  |                             _audioController!.duration | ||||||
|  |                                     ?.toHumanReadableString() ?? | ||||||
|  |                                 '00:00', | ||||||
|  |                             style: GoogleFonts.robotoMono(fontSize: 12), | ||||||
|  |                           ), | ||||||
|  |                         ], | ||||||
|  |                       ).paddingSymmetric(horizontal: 8, vertical: 4), | ||||||
|  |                     ], | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |                 const Gap(16), | ||||||
|  |                 IconButton.filled( | ||||||
|  |                   icon: _audioController!.playing | ||||||
|  |                       ? const Icon(Icons.pause) | ||||||
|  |                       : const Icon(Icons.play_arrow), | ||||||
|  |                   onPressed: () { | ||||||
|  |                     if (_audioController!.playing) { | ||||||
|  |                       _audioController!.pause(); | ||||||
|  |                     } else { | ||||||
|  |                       _audioController!.play(); | ||||||
|  |                     } | ||||||
|  |                   }, | ||||||
|  |                   visualDensity: const VisualDensity( | ||||||
|  |                     horizontal: -4, | ||||||
|  |                     vertical: 0, | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |               ], | ||||||
|  |             ), | ||||||
|  |           ], | ||||||
|  |         ), | ||||||
|  |       ), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   void dispose() { |   void dispose() { | ||||||
|     _player.dispose(); |     _audioController?.dispose(); | ||||||
|     super.dispose(); |     super.dispose(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | class _PlayerProgressTrackShape extends RoundedRectSliderTrackShape { | ||||||
|  |   @override | ||||||
|  |   Rect getPreferredRect({ | ||||||
|  |     required RenderBox parentBox, | ||||||
|  |     Offset offset = Offset.zero, | ||||||
|  |     required SliderThemeData sliderTheme, | ||||||
|  |     bool isEnabled = false, | ||||||
|  |     bool isDiscrete = false, | ||||||
|  |   }) { | ||||||
|  |     final trackHeight = sliderTheme.trackHeight; | ||||||
|  |     final trackLeft = offset.dx; | ||||||
|  |     final trackTop = offset.dy + (parentBox.size.height - trackHeight!) / 2; | ||||||
|  |     final trackWidth = parentBox.size.width; | ||||||
|  |     return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight); | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -94,6 +94,8 @@ class _AttachmentListState extends State<AttachmentList> { | |||||||
|         } else { |         } else { | ||||||
|           portrait++; |           portrait++; | ||||||
|         } |         } | ||||||
|  |       } else if (entry.mimetype.split('/').firstOrNull == 'audio') { | ||||||
|  |         landscape++; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     if (isConsistent && consistentValue != null) { |     if (isConsistent && consistentValue != null) { | ||||||
|   | |||||||
| @@ -11,8 +11,6 @@ | |||||||
| #include <flutter_acrylic/flutter_acrylic_plugin.h> | #include <flutter_acrylic/flutter_acrylic_plugin.h> | ||||||
| #include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h> | #include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h> | ||||||
| #include <flutter_webrtc/flutter_web_r_t_c_plugin.h> | #include <flutter_webrtc/flutter_web_r_t_c_plugin.h> | ||||||
| #include <media_kit_libs_linux/media_kit_libs_linux_plugin.h> |  | ||||||
| #include <media_kit_video/media_kit_video_plugin.h> |  | ||||||
| #include <pasteboard/pasteboard_plugin.h> | #include <pasteboard/pasteboard_plugin.h> | ||||||
| #include <url_launcher_linux/url_launcher_plugin.h> | #include <url_launcher_linux/url_launcher_plugin.h> | ||||||
|  |  | ||||||
| @@ -32,12 +30,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { | |||||||
|   g_autoptr(FlPluginRegistrar) flutter_webrtc_registrar = |   g_autoptr(FlPluginRegistrar) flutter_webrtc_registrar = | ||||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterWebRTCPlugin"); |       fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterWebRTCPlugin"); | ||||||
|   flutter_web_r_t_c_plugin_register_with_registrar(flutter_webrtc_registrar); |   flutter_web_r_t_c_plugin_register_with_registrar(flutter_webrtc_registrar); | ||||||
|   g_autoptr(FlPluginRegistrar) media_kit_libs_linux_registrar = |  | ||||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "MediaKitLibsLinuxPlugin"); |  | ||||||
|   media_kit_libs_linux_plugin_register_with_registrar(media_kit_libs_linux_registrar); |  | ||||||
|   g_autoptr(FlPluginRegistrar) media_kit_video_registrar = |  | ||||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "MediaKitVideoPlugin"); |  | ||||||
|   media_kit_video_plugin_register_with_registrar(media_kit_video_registrar); |  | ||||||
|   g_autoptr(FlPluginRegistrar) pasteboard_registrar = |   g_autoptr(FlPluginRegistrar) pasteboard_registrar = | ||||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "PasteboardPlugin"); |       fl_plugin_registry_get_registrar_for_plugin(registry, "PasteboardPlugin"); | ||||||
|   pasteboard_plugin_register_with_registrar(pasteboard_registrar); |   pasteboard_plugin_register_with_registrar(pasteboard_registrar); | ||||||
|   | |||||||
| @@ -8,14 +8,11 @@ list(APPEND FLUTTER_PLUGIN_LIST | |||||||
|   flutter_acrylic |   flutter_acrylic | ||||||
|   flutter_secure_storage_linux |   flutter_secure_storage_linux | ||||||
|   flutter_webrtc |   flutter_webrtc | ||||||
|   media_kit_libs_linux |  | ||||||
|   media_kit_video |  | ||||||
|   pasteboard |   pasteboard | ||||||
|   url_launcher_linux |   url_launcher_linux | ||||||
| ) | ) | ||||||
|  |  | ||||||
| list(APPEND FLUTTER_FFI_PLUGIN_LIST | list(APPEND FLUTTER_FFI_PLUGIN_LIST | ||||||
|   media_kit_native_event_loop |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| set(PLUGIN_BUNDLED_LIBRARIES) | set(PLUGIN_BUNDLED_LIBRARIES) | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ | |||||||
| import FlutterMacOS | import FlutterMacOS | ||||||
| import Foundation | import Foundation | ||||||
|  |  | ||||||
|  | import audio_session | ||||||
| import connectivity_plus | import connectivity_plus | ||||||
| import desktop_drop | import desktop_drop | ||||||
| import device_info_plus | import device_info_plus | ||||||
| @@ -16,22 +17,22 @@ import firebase_messaging | |||||||
| import flutter_secure_storage_macos | import flutter_secure_storage_macos | ||||||
| import flutter_webrtc | import flutter_webrtc | ||||||
| import gal | import gal | ||||||
|  | import just_audio | ||||||
| import livekit_client | import livekit_client | ||||||
| import macos_window_utils | import macos_window_utils | ||||||
| import media_kit_libs_macos_video |  | ||||||
| import media_kit_video |  | ||||||
| import package_info_plus | import package_info_plus | ||||||
| import pasteboard | import pasteboard | ||||||
| import path_provider_foundation | import path_provider_foundation | ||||||
| import protocol_handler_macos | import protocol_handler_macos | ||||||
| import screen_brightness_macos |  | ||||||
| import share_plus | import share_plus | ||||||
| import shared_preferences_foundation | import shared_preferences_foundation | ||||||
| import sqflite | import sqflite | ||||||
| import url_launcher_macos | import url_launcher_macos | ||||||
|  | import video_player_avfoundation | ||||||
| import wakelock_plus | import wakelock_plus | ||||||
|  |  | ||||||
| func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { | ||||||
|  |   AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin")) | ||||||
|   ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) |   ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) | ||||||
|   DesktopDropPlugin.register(with: registry.registrar(forPlugin: "DesktopDropPlugin")) |   DesktopDropPlugin.register(with: registry.registrar(forPlugin: "DesktopDropPlugin")) | ||||||
|   DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) |   DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) | ||||||
| @@ -43,18 +44,17 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { | |||||||
|   FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) |   FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) | ||||||
|   FlutterWebRTCPlugin.register(with: registry.registrar(forPlugin: "FlutterWebRTCPlugin")) |   FlutterWebRTCPlugin.register(with: registry.registrar(forPlugin: "FlutterWebRTCPlugin")) | ||||||
|   GalPlugin.register(with: registry.registrar(forPlugin: "GalPlugin")) |   GalPlugin.register(with: registry.registrar(forPlugin: "GalPlugin")) | ||||||
|  |   JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin")) | ||||||
|   LiveKitPlugin.register(with: registry.registrar(forPlugin: "LiveKitPlugin")) |   LiveKitPlugin.register(with: registry.registrar(forPlugin: "LiveKitPlugin")) | ||||||
|   MacOSWindowUtilsPlugin.register(with: registry.registrar(forPlugin: "MacOSWindowUtilsPlugin")) |   MacOSWindowUtilsPlugin.register(with: registry.registrar(forPlugin: "MacOSWindowUtilsPlugin")) | ||||||
|   MediaKitLibsMacosVideoPlugin.register(with: registry.registrar(forPlugin: "MediaKitLibsMacosVideoPlugin")) |  | ||||||
|   MediaKitVideoPlugin.register(with: registry.registrar(forPlugin: "MediaKitVideoPlugin")) |  | ||||||
|   FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) |   FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) | ||||||
|   PasteboardPlugin.register(with: registry.registrar(forPlugin: "PasteboardPlugin")) |   PasteboardPlugin.register(with: registry.registrar(forPlugin: "PasteboardPlugin")) | ||||||
|   PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) |   PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) | ||||||
|   ProtocolHandlerMacosPlugin.register(with: registry.registrar(forPlugin: "ProtocolHandlerMacosPlugin")) |   ProtocolHandlerMacosPlugin.register(with: registry.registrar(forPlugin: "ProtocolHandlerMacosPlugin")) | ||||||
|   ScreenBrightnessMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenBrightnessMacosPlugin")) |  | ||||||
|   SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) |   SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) | ||||||
|   SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) |   SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) | ||||||
|   SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) |   SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) | ||||||
|   UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) |   UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) | ||||||
|  |   FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) | ||||||
|   WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) |   WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										272
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										272
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -70,6 +70,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.11.0" |     version: "2.11.0" | ||||||
|  |   audio_session: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: audio_session | ||||||
|  |       sha256: "343e83bc7809fbda2591a49e525d6b63213ade10c76f15813be9aed6657b3261" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.1.21" | ||||||
|   avatar_stack: |   avatar_stack: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -214,6 +222,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.0.3" |     version: "2.0.3" | ||||||
|  |   chewie: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: chewie | ||||||
|  |       sha256: "8210c6e8702ddae9b3337aad0d539a9ff128cc4a5baaadc0174edbd0f99b0125" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.8.4" | ||||||
|   cli_util: |   cli_util: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -398,6 +414,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.0.5" |     version: "2.0.5" | ||||||
|  |   eventify: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: eventify | ||||||
|  |       sha256: b829429f08586cc2001c628e7499e3e3c2493a1d895fd73b00ecb23351aa5a66 | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.0.1" | ||||||
|   fake_async: |   fake_async: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1133,6 +1157,46 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "6.8.0" |     version: "6.8.0" | ||||||
|  |   just_audio: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: just_audio | ||||||
|  |       sha256: d8e8aaf417d33e345299c17f6457f72bd4ba0c549dc34607abb5183a354edc4d | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.9.40" | ||||||
|  |   just_audio_mpv: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: just_audio_mpv | ||||||
|  |       sha256: d6e4e9fd20bfb9d2fd5e3dcd7906c90ed07f83d1d2f44f31204160821ab62fed | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.1.7" | ||||||
|  |   just_audio_platform_interface: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: just_audio_platform_interface | ||||||
|  |       sha256: "0243828cce503c8366cc2090cefb2b3c871aa8ed2f520670d76fd47aa1ab2790" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "4.3.0" | ||||||
|  |   just_audio_web: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: just_audio_web | ||||||
|  |       sha256: b163878529d9b028c53a6972fcd58cae2405bcd11cbfcea620b6fb9f151429d6 | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.4.12" | ||||||
|  |   just_audio_windows: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: just_audio_windows | ||||||
|  |       sha256: "48ab2dec79cf6097550602fe07b1a644f341450e138dc8fdc23e42ce0ed2d928" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.2.1" | ||||||
|   leak_tracker: |   leak_tracker: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1237,78 +1301,6 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.11.1" |     version: "0.11.1" | ||||||
|   media_kit: |  | ||||||
|     dependency: "direct main" |  | ||||||
|     description: |  | ||||||
|       name: media_kit |  | ||||||
|       sha256: "1f1deee148533d75129a6f38251ff8388e33ee05fc2d20a6a80e57d6051b7b62" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.1.11" |  | ||||||
|   media_kit_libs_android_video: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: media_kit_libs_android_video |  | ||||||
|       sha256: "9dd8012572e4aff47516e55f2597998f0a378e3d588d0fad0ca1f11a53ae090c" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.3.6" |  | ||||||
|   media_kit_libs_ios_video: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: media_kit_libs_ios_video |  | ||||||
|       sha256: b5382994eb37a4564c368386c154ad70ba0cc78dacdd3fb0cd9f30db6d837991 |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.1.4" |  | ||||||
|   media_kit_libs_linux: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: media_kit_libs_linux |  | ||||||
|       sha256: e186891c31daa6bedab4d74dcdb4e8adfccc7d786bfed6ad81fe24a3b3010310 |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.1.3" |  | ||||||
|   media_kit_libs_macos_video: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: media_kit_libs_macos_video |  | ||||||
|       sha256: f26aa1452b665df288e360393758f84b911f70ffb3878032e1aabba23aa1032d |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.1.4" |  | ||||||
|   media_kit_libs_video: |  | ||||||
|     dependency: "direct main" |  | ||||||
|     description: |  | ||||||
|       name: media_kit_libs_video |  | ||||||
|       sha256: "20bb4aefa8fece282b59580e1cd8528117297083a6640c98c2e98cfc96b93288" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.0.5" |  | ||||||
|   media_kit_libs_windows_video: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: media_kit_libs_windows_video |  | ||||||
|       sha256: "32654572167825c42c55466f5d08eee23ea11061c84aa91b09d0e0f69bdd0887" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.0.10" |  | ||||||
|   media_kit_native_event_loop: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: media_kit_native_event_loop |  | ||||||
|       sha256: "7d82e3b3e9ded5c35c3146c5ba1da3118d1dd8ac3435bac7f29f458181471b40" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.0.9" |  | ||||||
|   media_kit_video: |  | ||||||
|     dependency: "direct main" |  | ||||||
|     description: |  | ||||||
|       name: media_kit_video |  | ||||||
|       sha256: "2cc3b966679963ba25a4ce5b771e532a521ebde7c6aa20e9802bec95d9916c8f" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.2.5" |  | ||||||
|   meta: |   meta: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1325,6 +1317,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.0.6" |     version: "1.0.6" | ||||||
|  |   mpv_dart: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: mpv_dart | ||||||
|  |       sha256: a33bd9a68439b496b7a5f36fecd3aa3cf6cbf0176ae15b9b60b12ae96e58f5a4 | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "0.0.1" | ||||||
|   nested: |   nested: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1661,62 +1661,6 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.28.0" |     version: "0.28.0" | ||||||
|   safe_local_storage: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: safe_local_storage |  | ||||||
|       sha256: ede4eb6cb7d88a116b3d3bf1df70790b9e2038bc37cb19112e381217c74d9440 |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.0.2" |  | ||||||
|   screen_brightness: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: screen_brightness |  | ||||||
|       sha256: ed8da4a4511e79422fc1aa88138e920e4008cd312b72cdaa15ccb426c0faaedd |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "0.2.2+1" |  | ||||||
|   screen_brightness_android: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: screen_brightness_android |  | ||||||
|       sha256: "3df10961e3a9e968a5e076fe27e7f4741fa8a1d3950bdeb48cf121ed529d0caf" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "0.1.0+2" |  | ||||||
|   screen_brightness_ios: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: screen_brightness_ios |  | ||||||
|       sha256: "99adc3ca5490b8294284aad5fcc87f061ad685050e03cf45d3d018fe398fd9a2" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "0.1.0" |  | ||||||
|   screen_brightness_macos: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: screen_brightness_macos |  | ||||||
|       sha256: "64b34e7e3f4900d7687c8e8fb514246845a73ecec05ab53483ed025bd4a899fd" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "0.1.0+1" |  | ||||||
|   screen_brightness_platform_interface: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: screen_brightness_platform_interface |  | ||||||
|       sha256: b211d07f0c96637a15fb06f6168617e18030d5d74ad03795dd8547a52717c171 |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "0.1.0" |  | ||||||
|   screen_brightness_windows: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: screen_brightness_windows |  | ||||||
|       sha256: "9261bf33d0fc2707d8cf16339ce25768100a65e70af0fcabaf032fc12408ba86" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "0.1.3" |  | ||||||
|   sdp_transform: |   sdp_transform: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -2010,22 +1954,6 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.2.2" |     version: "2.2.2" | ||||||
|   universal_platform: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: universal_platform |  | ||||||
|       sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "1.1.0" |  | ||||||
|   uri_parser: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: uri_parser |  | ||||||
|       sha256: "6543c9fd86d2862fac55d800a43e67c0dcd1a41677cb69c2f8edfe73bbcf1835" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "2.0.2" |  | ||||||
|   url_launcher: |   url_launcher: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -2130,6 +2058,54 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.1.4" |     version: "2.1.4" | ||||||
|  |   video_player: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: video_player | ||||||
|  |       sha256: e30df0d226c4ef82e2c150ebf6834b3522cf3f654d8e2f9419d376cdc071425d | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.9.1" | ||||||
|  |   video_player_android: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: video_player_android | ||||||
|  |       sha256: "38d8fe136c427abdce68b5e8c3c08ea29d7a794b453c7a51b12ecfad4aad9437" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.7.3" | ||||||
|  |   video_player_avfoundation: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: video_player_avfoundation | ||||||
|  |       sha256: d1e9a824f2b324000dc8fb2dcb2a3285b6c1c7c487521c63306cc5b394f68a7c | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.6.1" | ||||||
|  |   video_player_platform_interface: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: video_player_platform_interface | ||||||
|  |       sha256: "236454725fafcacf98f0f39af0d7c7ab2ce84762e3b63f2cbb3ef9a7e0550bc6" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "6.2.2" | ||||||
|  |   video_player_web: | ||||||
|  |     dependency: transitive | ||||||
|  |     description: | ||||||
|  |       name: video_player_web | ||||||
|  |       sha256: "6dcdd298136523eaf7dfc31abaf0dfba9aa8a8dbc96670e87e9d42b6f2caf774" | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.3.2" | ||||||
|  |   video_player_win: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: video_player_win | ||||||
|  |       sha256: e7b92ae1050086f9be3787eba1fbecbea278b59453cb3589263daa0c62772a88 | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "2.3.11" | ||||||
|   vm_service: |   vm_service: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -2138,14 +2114,6 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "14.2.5" |     version: "14.2.5" | ||||||
|   volume_controller: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: volume_controller |  | ||||||
|       sha256: c71d4c62631305df63b72da79089e078af2659649301807fa746088f365cb48e |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "2.0.8" |  | ||||||
|   wakelock_plus: |   wakelock_plus: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								pubspec.yaml
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								pubspec.yaml
									
									
									
									
									
								
							| @@ -2,7 +2,7 @@ name: solian | |||||||
| description: "The Solar Network App" | description: "The Solar Network App" | ||||||
| publish_to: "none" | publish_to: "none" | ||||||
|  |  | ||||||
| version: 1.2.1+28 | version: 1.2.1+29 | ||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.3.4 <4.0.0" |   sdk: ">=3.3.4 <4.0.0" | ||||||
| @@ -68,9 +68,6 @@ dependencies: | |||||||
|   firebase_crashlytics: ^4.0.4 |   firebase_crashlytics: ^4.0.4 | ||||||
|   firebase_analytics: ^11.2.1 |   firebase_analytics: ^11.2.1 | ||||||
|   firebase_performance: ^0.10.0+4 |   firebase_performance: ^0.10.0+4 | ||||||
|   media_kit: ^1.1.10+1 |  | ||||||
|   media_kit_video: ^1.2.4 |  | ||||||
|   media_kit_libs_video: ^1.0.4 |  | ||||||
|   flutter_svg: ^2.0.10+1 |   flutter_svg: ^2.0.10+1 | ||||||
|   cross_file: ^0.3.4+2 |   cross_file: ^0.3.4+2 | ||||||
|   google_fonts: ^6.2.1 |   google_fonts: ^6.2.1 | ||||||
| @@ -78,6 +75,12 @@ dependencies: | |||||||
|   json_annotation: ^4.9.0 |   json_annotation: ^4.9.0 | ||||||
|   gap: ^3.0.1 |   gap: ^3.0.1 | ||||||
|   fl_chart: ^0.69.0 |   fl_chart: ^0.69.0 | ||||||
|  |   video_player: ^2.9.1 | ||||||
|  |   video_player_win: ^2.3.11 | ||||||
|  |   chewie: ^1.8.4 | ||||||
|  |   just_audio: ^0.9.40 | ||||||
|  |   just_audio_windows: ^0.2.1 | ||||||
|  |   just_audio_mpv: ^0.1.7 | ||||||
|  |  | ||||||
| dev_dependencies: | dev_dependencies: | ||||||
|   flutter_test: |   flutter_test: | ||||||
|   | |||||||
| @@ -14,15 +14,14 @@ | |||||||
| #include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h> | #include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h> | ||||||
| #include <flutter_webrtc/flutter_web_r_t_c_plugin.h> | #include <flutter_webrtc/flutter_web_r_t_c_plugin.h> | ||||||
| #include <gal/gal_plugin_c_api.h> | #include <gal/gal_plugin_c_api.h> | ||||||
|  | #include <just_audio_windows/just_audio_windows_plugin.h> | ||||||
| #include <livekit_client/live_kit_plugin.h> | #include <livekit_client/live_kit_plugin.h> | ||||||
| #include <media_kit_libs_windows_video/media_kit_libs_windows_video_plugin_c_api.h> |  | ||||||
| #include <media_kit_video/media_kit_video_plugin_c_api.h> |  | ||||||
| #include <pasteboard/pasteboard_plugin.h> | #include <pasteboard/pasteboard_plugin.h> | ||||||
| #include <permission_handler_windows/permission_handler_windows_plugin.h> | #include <permission_handler_windows/permission_handler_windows_plugin.h> | ||||||
| #include <protocol_handler_windows/protocol_handler_windows_plugin_c_api.h> | #include <protocol_handler_windows/protocol_handler_windows_plugin_c_api.h> | ||||||
| #include <screen_brightness_windows/screen_brightness_windows_plugin.h> |  | ||||||
| #include <share_plus/share_plus_windows_plugin_c_api.h> | #include <share_plus/share_plus_windows_plugin_c_api.h> | ||||||
| #include <url_launcher_windows/url_launcher_windows.h> | #include <url_launcher_windows/url_launcher_windows.h> | ||||||
|  | #include <video_player_win/video_player_win_plugin_c_api.h> | ||||||
|  |  | ||||||
| void RegisterPlugins(flutter::PluginRegistry* registry) { | void RegisterPlugins(flutter::PluginRegistry* registry) { | ||||||
|   ConnectivityPlusWindowsPluginRegisterWithRegistrar( |   ConnectivityPlusWindowsPluginRegisterWithRegistrar( | ||||||
| @@ -41,22 +40,20 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { | |||||||
|       registry->GetRegistrarForPlugin("FlutterWebRTCPlugin")); |       registry->GetRegistrarForPlugin("FlutterWebRTCPlugin")); | ||||||
|   GalPluginCApiRegisterWithRegistrar( |   GalPluginCApiRegisterWithRegistrar( | ||||||
|       registry->GetRegistrarForPlugin("GalPluginCApi")); |       registry->GetRegistrarForPlugin("GalPluginCApi")); | ||||||
|  |   JustAudioWindowsPluginRegisterWithRegistrar( | ||||||
|  |       registry->GetRegistrarForPlugin("JustAudioWindowsPlugin")); | ||||||
|   LiveKitPluginRegisterWithRegistrar( |   LiveKitPluginRegisterWithRegistrar( | ||||||
|       registry->GetRegistrarForPlugin("LiveKitPlugin")); |       registry->GetRegistrarForPlugin("LiveKitPlugin")); | ||||||
|   MediaKitLibsWindowsVideoPluginCApiRegisterWithRegistrar( |  | ||||||
|       registry->GetRegistrarForPlugin("MediaKitLibsWindowsVideoPluginCApi")); |  | ||||||
|   MediaKitVideoPluginCApiRegisterWithRegistrar( |  | ||||||
|       registry->GetRegistrarForPlugin("MediaKitVideoPluginCApi")); |  | ||||||
|   PasteboardPluginRegisterWithRegistrar( |   PasteboardPluginRegisterWithRegistrar( | ||||||
|       registry->GetRegistrarForPlugin("PasteboardPlugin")); |       registry->GetRegistrarForPlugin("PasteboardPlugin")); | ||||||
|   PermissionHandlerWindowsPluginRegisterWithRegistrar( |   PermissionHandlerWindowsPluginRegisterWithRegistrar( | ||||||
|       registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); |       registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); | ||||||
|   ProtocolHandlerWindowsPluginCApiRegisterWithRegistrar( |   ProtocolHandlerWindowsPluginCApiRegisterWithRegistrar( | ||||||
|       registry->GetRegistrarForPlugin("ProtocolHandlerWindowsPluginCApi")); |       registry->GetRegistrarForPlugin("ProtocolHandlerWindowsPluginCApi")); | ||||||
|   ScreenBrightnessWindowsPluginRegisterWithRegistrar( |  | ||||||
|       registry->GetRegistrarForPlugin("ScreenBrightnessWindowsPlugin")); |  | ||||||
|   SharePlusWindowsPluginCApiRegisterWithRegistrar( |   SharePlusWindowsPluginCApiRegisterWithRegistrar( | ||||||
|       registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); |       registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); | ||||||
|   UrlLauncherWindowsRegisterWithRegistrar( |   UrlLauncherWindowsRegisterWithRegistrar( | ||||||
|       registry->GetRegistrarForPlugin("UrlLauncherWindows")); |       registry->GetRegistrarForPlugin("UrlLauncherWindows")); | ||||||
|  |   VideoPlayerWinPluginCApiRegisterWithRegistrar( | ||||||
|  |       registry->GetRegistrarForPlugin("VideoPlayerWinPluginCApi")); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,19 +11,17 @@ list(APPEND FLUTTER_PLUGIN_LIST | |||||||
|   flutter_secure_storage_windows |   flutter_secure_storage_windows | ||||||
|   flutter_webrtc |   flutter_webrtc | ||||||
|   gal |   gal | ||||||
|  |   just_audio_windows | ||||||
|   livekit_client |   livekit_client | ||||||
|   media_kit_libs_windows_video |  | ||||||
|   media_kit_video |  | ||||||
|   pasteboard |   pasteboard | ||||||
|   permission_handler_windows |   permission_handler_windows | ||||||
|   protocol_handler_windows |   protocol_handler_windows | ||||||
|   screen_brightness_windows |  | ||||||
|   share_plus |   share_plus | ||||||
|   url_launcher_windows |   url_launcher_windows | ||||||
|  |   video_player_win | ||||||
| ) | ) | ||||||
|  |  | ||||||
| list(APPEND FLUTTER_FFI_PLUGIN_LIST | list(APPEND FLUTTER_FFI_PLUGIN_LIST | ||||||
|   media_kit_native_event_loop |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| set(PLUGIN_BUNDLED_LIBRARIES) | set(PLUGIN_BUNDLED_LIBRARIES) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user