fix ios volume

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-09-05 11:30:47 +08:00
parent 6e6ff369d3
commit 224bd88473
7 changed files with 33 additions and 29 deletions

View File

@@ -1,7 +1,7 @@
import UIKit import UIKit
import Flutter import Flutter
@UIApplicationMain @main
@objc class AppDelegate: FlutterAppDelegate { @objc class AppDelegate: FlutterAppDelegate {
override func application( override func application(
_ application: UIApplication, _ application: UIApplication,

View File

@@ -56,12 +56,12 @@ import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:flutter_volume_controller/flutter_volume_controller.dart';
import 'package:get/get.dart' hide ContextExtensionss; import 'package:get/get.dart' hide ContextExtensionss;
import 'package:get/get_navigation/src/dialog/dialog_route.dart'; import 'package:get/get_navigation/src/dialog/dialog_route.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:media_kit/media_kit.dart'; import 'package:media_kit/media_kit.dart';
import 'package:volume_controller/volume_controller.dart';
class VideoDetailController extends GetxController class VideoDetailController extends GetxController
with GetTickerProviderStateMixin { with GetTickerProviderStateMixin {
@@ -1506,7 +1506,7 @@ class VideoDetailController extends GetxController
if (idx == 0) { if (idx == 0) {
if (preference == SubtitlePrefType.on || if (preference == SubtitlePrefType.on ||
(preference == SubtitlePrefType.auto && (preference == SubtitlePrefType.auto &&
await VolumeController.instance.getVolume() <= 0)) { (await FlutterVolumeController.getVolume() ?? 0) <= 0)) {
idx = 1; idx = 1;
} }
} }

View File

@@ -44,6 +44,7 @@ import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:flutter_volume_controller/flutter_volume_controller.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:media_kit/media_kit.dart'; import 'package:media_kit/media_kit.dart';
@@ -52,7 +53,6 @@ import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:screen_brightness/screen_brightness.dart'; import 'package:screen_brightness/screen_brightness.dart';
import 'package:universal_platform/universal_platform.dart'; import 'package:universal_platform/universal_platform.dart';
import 'package:volume_controller/volume_controller.dart';
class PlPlayerController { class PlPlayerController {
Player? _videoPlayerController; Player? _videoPlayerController;
@@ -1212,7 +1212,7 @@ class PlPlayerController {
Future<void> getCurrentVolume() async { Future<void> getCurrentVolume() async {
// mac try...catch // mac try...catch
try { try {
_currentVolume.value = await VolumeController.instance.getVolume(); _currentVolume.value = (await FlutterVolumeController.getVolume())!;
} catch (_) {} } catch (_) {}
} }
@@ -1231,9 +1231,8 @@ class PlPlayerController {
volume.value = volumeNew; volume.value = volumeNew;
try { try {
await (VolumeController.instance..showSystemUI = false).setVolume( FlutterVolumeController.updateShowSystemUI(false);
volumeNew, await FlutterVolumeController.setVolume(volumeNew);
);
} catch (err) { } catch (err) {
if (kDebugMode) debugPrint(err.toString()); if (kDebugMode) debugPrint(err.toString());
} }

View File

@@ -54,6 +54,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:flutter_volume_controller/flutter_volume_controller.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:get/get.dart' hide ContextExtensionss; import 'package:get/get.dart' hide ContextExtensionss;
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
@@ -61,7 +62,6 @@ import 'package:media_kit/media_kit.dart';
import 'package:media_kit_video/media_kit_video.dart'; import 'package:media_kit_video/media_kit_video.dart';
import 'package:saver_gallery/saver_gallery.dart'; import 'package:saver_gallery/saver_gallery.dart';
import 'package:screen_brightness/screen_brightness.dart'; import 'package:screen_brightness/screen_brightness.dart';
import 'package:volume_controller/volume_controller.dart';
class PLVideoPlayer extends StatefulWidget { class PLVideoPlayer extends StatefulWidget {
const PLVideoPlayer({ const PLVideoPlayer({
@@ -203,12 +203,12 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
videoController = plPlayerController.videoController!; videoController = plPlayerController.videoController!;
Future.microtask(() async { Future.microtask(() async {
try { try {
final volumeCtr = VolumeController.instance..showSystemUI = true; FlutterVolumeController.updateShowSystemUI(true);
_volumeValue.value = await volumeCtr.getVolume(); _volumeValue.value = (await FlutterVolumeController.getVolume())!;
volumeCtr.addListener((double value) { FlutterVolumeController.addListener((double value) {
if (mounted && !_volumeInterceptEventStream.value) { if (mounted && !_volumeInterceptEventStream.value) {
_volumeValue.value = value; _volumeValue.value = value;
if (Platform.isIOS && !volumeCtr.showSystemUI) { if (Platform.isIOS && !FlutterVolumeController.showSystemUI) {
_volumeIndicator.value = true; _volumeIndicator.value = true;
_volumeTimer?.cancel(); _volumeTimer?.cancel();
_volumeTimer = Timer(const Duration(milliseconds: 800), () { _volumeTimer = Timer(const Duration(milliseconds: 800), () {
@@ -239,7 +239,8 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
Future<void> setVolume(double value) async { Future<void> setVolume(double value) async {
try { try {
await (VolumeController.instance..showSystemUI = false).setVolume(value); FlutterVolumeController.updateShowSystemUI(false);
await FlutterVolumeController.setVolume(value);
} catch (_) {} } catch (_) {}
_volumeValue.value = value; _volumeValue.value = value;
@@ -273,7 +274,7 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
_listener?.cancel(); _listener?.cancel();
_controlsListener?.cancel(); _controlsListener?.cancel();
animationController.dispose(); animationController.dispose();
VolumeController.instance.removeListener(); FlutterVolumeController.removeListener();
transformationController.dispose(); transformationController.dispose();
super.dispose(); super.dispose();
} }

View File

@@ -16,7 +16,12 @@ class AudioSessionHandler {
Future<void> initSession() async { Future<void> initSession() async {
session = await AudioSession.instance; session = await AudioSession.instance;
session.configure(const AudioSessionConfiguration.music()); session.configure(
const AudioSessionConfiguration.music().copyWith(
avAudioSessionSetActiveOptions:
AVAudioSessionSetActiveOptions.notifyOthersOnDeactivation,
),
);
session.interruptionEventStream.listen((event) { session.interruptionEventStream.listen((event) {
final playerStatus = PlPlayerController.getPlayerStatusIfExists(); final playerStatus = PlPlayerController.getPlayerStatusIfExists();

View File

@@ -774,6 +774,14 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_volume_controller:
dependency: "direct main"
description:
name: flutter_volume_controller
sha256: "15f2c25bc4632ac5e8d42a208fe07c3224a4ee66b155d1ac86945b3db2bb58d9"
url: "https://pub.dev"
source: hosted
version: "1.3.3"
flutter_web_plugins: flutter_web_plugins:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -1202,8 +1210,8 @@ packages:
description: description:
path: media_kit_video path: media_kit_video
ref: "version_1.2.5" ref: "version_1.2.5"
resolved-ref: f89452bc27af26324a83961c8286d4f41432a5f9 resolved-ref: c4655bfb4bf81b6bb450d252184da20e2fbba292
url: "https://github.com/My-Responsitories/media-kit.git" url: "https://github.com/bggRGjQaUbCoE/media-kit.git"
source: git source: git
version: "1.2.5" version: "1.2.5"
meta: meta:
@@ -1955,14 +1963,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "15.0.2" version: "15.0.2"
volume_controller:
dependency: "direct main"
description:
name: volume_controller
sha256: d75039e69c0d90e7810bfd47e3eedf29ff8543ea7a10392792e81f9bded7edf5
url: "https://pub.dev"
source: hosted
version: "3.4.0"
wakelock_plus: wakelock_plus:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@@ -104,7 +104,7 @@ dependencies:
# media_kit_video: ^1.2.5 # For video rendering. # media_kit_video: ^1.2.5 # For video rendering.
media_kit_video: media_kit_video:
git: git:
url: https://github.com/My-Responsitories/media-kit.git url: https://github.com/bggRGjQaUbCoE/media-kit.git
path: media_kit_video path: media_kit_video
ref: version_1.2.5 ref: version_1.2.5
media_kit_libs_video: 1.0.5 media_kit_libs_video: 1.0.5
@@ -114,7 +114,7 @@ dependencies:
audio_session: ^0.2.2 audio_session: ^0.2.2
# 音量、亮度、屏幕控制 # 音量、亮度、屏幕控制
volume_controller: ^2.0.7 flutter_volume_controller: ^1.3.3
wakelock_plus: ^1.2.8 wakelock_plus: ^1.2.8
# universal_platform: ^1.1.0 # universal_platform: ^1.1.0
auto_orientation: auto_orientation:
@@ -230,7 +230,6 @@ dependency_overrides:
url: https://github.com/My-Responsitories/media-kit.git url: https://github.com/My-Responsitories/media-kit.git
path: libs/android/media_kit_libs_android_video path: libs/android/media_kit_libs_android_video
ref: version_1.2.5 ref: version_1.2.5
volume_controller: ^3.4.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: