custom player/max volume

Closes #2199
Closes #2358

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-06-08 17:28:32 +08:00
parent fe15024384
commit 90d79b236f
19 changed files with 293 additions and 143 deletions

View File

@@ -19,6 +19,8 @@ import 'package:PiliPlus/pages/common/common_intro_controller.dart'
show FavMixin;
import 'package:PiliPlus/pages/dynamics_repost/view.dart';
import 'package:PiliPlus/pages/main_reply/view.dart';
import 'package:PiliPlus/pages/setting/models/play_settings.dart'
show kMaxVolume;
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';
@@ -328,11 +330,14 @@ class AudioController extends GetxController
_hasInit = true;
assert(player == null, _subscriptions = null);
player = await Player.create(
configuration: PlatformUtils.isDesktop
? PlayerConfiguration(
options: {'volume': (desktopVolume.value * 100).toString()},
)
: const PlayerConfiguration(),
configuration: PlayerConfiguration(
options: {
'volume': PlatformUtils.isDesktop
? (desktopVolume.value * 100).toString()
: Pref.playerVolume.toString(),
'volume-max': kMaxVolume.toString(),
},
),
);
if (isClosed) {
player!.dispose();

View File

@@ -14,7 +14,11 @@ import 'package:PiliPlus/models/common/image_preview_type.dart';
import 'package:PiliPlus/models/common/image_type.dart';
import 'package:PiliPlus/pages/audio/controller.dart';
import 'package:PiliPlus/pages/audio/volume_button.dart';
import 'package:PiliPlus/pages/setting/models/play_settings.dart'
show showPlayerVolumeDialog;
import 'package:PiliPlus/pages/video/introduction/ugc/widgets/action_item.dart';
import 'package:PiliPlus/pages/video/widgets/header_control.dart'
show HeaderControlState;
import 'package:PiliPlus/plugin/pl_player/models/play_repeat.dart';
import 'package:PiliPlus/services/shutdown_timer_service.dart';
import 'package:PiliPlus/utils/date_utils.dart';
@@ -615,28 +619,43 @@ class _AudioPageState extends State<AudioPage> {
),
),
),
// ListTile(
// dense: true,
// title: const Text(
// '定时关闭',
// style: TextStyle(fontSize: 14),
// ),
// onTap: () {
// Get.back();
// _controller.showTimerDialog();
// },
// ),
ListTile(
dense: true,
title: const Text(
'举报',
style: TextStyle(fontSize: 14),
),
leading: const Icon(Icons.warning_amber_rounded, size: 20),
title: const Text('举报', style: TextStyle(fontSize: 14)),
onTap: () {
Get.back();
PageUtils.reportVideo(_controller.oid.toInt());
},
),
if (_controller.player case final player?) ...[
ListTile(
dense: true,
leading: const Icon(Icons.info_outline, size: 20),
title: const Text('播放信息', style: TextStyle(fontSize: 14)),
onTap: () {
Get.back();
HeaderControlState.showPlayerInfo(context, player: player);
},
),
if (PlatformUtils.isMobile)
ListTile(
dense: true,
leading: const Icon(Icons.volume_up, size: 20),
title: Text(
'播放器音量: ${player.getProperty('volume').subLength(3)}%',
style: const TextStyle(fontSize: 14),
),
onTap: () {
Get.back();
showPlayerVolumeDialog(
context,
() {},
onChanged: player.setVolume,
);
},
),
],
],
),
);

View File

@@ -3,6 +3,7 @@ import 'dart:math' as math;
import 'package:PiliPlus/common/widgets/flutter/vertical_slider.dart';
import 'package:PiliPlus/pages/audio/controller.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart' show RenderProxyBox, BoxHitTestResult;
import 'package:get/get.dart';
@@ -140,7 +141,7 @@ class _VolumeButtonState extends State<VolumeButton> {
child: VerticalSlider(
year2023: true,
min: 0.0,
max: 2.0,
max: Pref.maxVolume,
value: volume,
showValueIndicator: .never,
onChanged: widget.controller.setVolume,