add audio volume button & slider on desktop

Closes #1950

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-05-03 21:23:03 +08:00
parent 9259e84d5c
commit d5bf3487f8
4 changed files with 2905 additions and 1 deletions

View File

@@ -23,6 +23,7 @@ import 'package:PiliPlus/pages/sponsor_block/block_mixin.dart';
import 'package:PiliPlus/pages/video/controller.dart';
import 'package:PiliPlus/pages/video/introduction/ugc/widgets/triple_mixin.dart';
import 'package:PiliPlus/pages/video/pay_coins/view.dart';
import 'package:PiliPlus/plugin/pl_player/controller.dart';
import 'package:PiliPlus/plugin/pl_player/models/play_repeat.dart';
import 'package:PiliPlus/plugin/pl_player/models/play_status.dart';
import 'package:PiliPlus/services/service_locator.dart';
@@ -36,6 +37,8 @@ import 'package:PiliPlus/utils/id_utils.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart';
import 'package:PiliPlus/utils/share_utils.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/storage_key.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:PiliPlus/utils/video_utils.dart';
@@ -94,6 +97,34 @@ class AudioController extends GetxController
ListOrder order = ListOrder.ORDER_NORMAL;
double? _lastVolume;
late final RxDouble desktopVolume = RxDouble(Pref.desktopVolume);
void toggleVolume() {
if (_lastVolume == null) {
_lastVolume = desktopVolume.value;
setVolume(0, clearLastVolme: false);
} else {
setVolume(_lastVolume!);
}
}
void setVolume(double volume, {bool clearLastVolme = true}) {
if (clearLastVolme) {
_lastVolume = null;
}
desktopVolume.value = volume;
player?.setVolume(volume * 100);
}
void syncVolume([_]) {
final volume = desktopVolume.value;
PlPlayerController.instance
?..volume.value = volume
..videoPlayerController?.setVolume(volume * 100);
GStorage.setting.put(SettingBoxKey.desktopVolume, volume.toPrecision(3));
}
@override
void onInit() {
super.onInit();
@@ -296,7 +327,13 @@ class AudioController extends GetxController
if (_hasInit) return;
_hasInit = true;
assert(player == null, _subscriptions = null);
player = await Player.create();
player = await Player.create(
configuration: PlatformUtils.isDesktop
? PlayerConfiguration(
options: {'volume': (desktopVolume.value * 100).toString()},
)
: const PlayerConfiguration(),
);
if (isClosed) {
player!.dispose();
player = null;