Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-04-20 11:59:31 +08:00
parent add633bc66
commit 4229024adf
4 changed files with 55 additions and 49 deletions

View File

@@ -18,7 +18,6 @@ import 'package:PiliPlus/models_new/live/live_room_play_info/codec.dart';
import 'package:PiliPlus/models_new/live/live_superchat/item.dart'; import 'package:PiliPlus/models_new/live/live_superchat/item.dart';
import 'package:PiliPlus/pages/common/publish/publish_route.dart'; import 'package:PiliPlus/pages/common/publish/publish_route.dart';
import 'package:PiliPlus/pages/danmaku/danmaku_model.dart'; import 'package:PiliPlus/pages/danmaku/danmaku_model.dart';
import 'package:PiliPlus/pages/live_room/contribution_rank/view.dart';
import 'package:PiliPlus/pages/live_room/send_danmaku/view.dart'; import 'package:PiliPlus/pages/live_room/send_danmaku/view.dart';
import 'package:PiliPlus/pages/video/widgets/header_control.dart'; import 'package:PiliPlus/pages/video/widgets/header_control.dart';
import 'package:PiliPlus/plugin/pl_player/controller.dart'; import 'package:PiliPlus/plugin/pl_player/controller.dart';
@@ -30,7 +29,6 @@ import 'package:PiliPlus/utils/accounts.dart';
import 'package:PiliPlus/utils/danmaku_utils.dart'; import 'package:PiliPlus/utils/danmaku_utils.dart';
import 'package:PiliPlus/utils/duration_utils.dart'; import 'package:PiliPlus/utils/duration_utils.dart';
import 'package:PiliPlus/utils/extension/iterable_ext.dart'; import 'package:PiliPlus/utils/extension/iterable_ext.dart';
import 'package:PiliPlus/utils/extension/size_ext.dart';
import 'package:PiliPlus/utils/global_data.dart'; import 'package:PiliPlus/utils/global_data.dart';
import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/num_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart';
@@ -130,40 +128,6 @@ class LiveRoomController extends GetxController {
final RxString title = ''.obs; final RxString title = ''.obs;
final RxnString onlineCount = RxnString(); final RxnString onlineCount = RxnString();
Widget get onlineWidget => GestureDetector(
onTap: _showRank,
child: Obx(() {
if (onlineCount.value case final onlineCount?) {
return Text(
'高能观众($onlineCount)',
style: const TextStyle(
fontSize: 12,
color: Colors.white,
),
);
}
return const SizedBox.shrink();
}),
);
void _showRank() {
if (ruid case final ruid?) {
final heightFactor =
PlatformUtils.isMobile && !Get.mediaQuery.size.isPortrait ? 1.0 : 0.7;
showModalBottomSheet(
context: Get.context!,
useSafeArea: true,
clipBehavior: .hardEdge,
isScrollControlled: true,
constraints: const BoxConstraints(maxWidth: 450),
builder: (context) => FractionallySizedBox(
widthFactor: 1.0,
heightFactor: heightFactor,
child: ContributionRankPanel(ruid: ruid, roomId: roomId),
),
);
}
}
final RxnString watchedShow = RxnString(); final RxnString watchedShow = RxnString();
Widget get watchedWidget => Obx(() { Widget get watchedWidget => Obx(() {

View File

@@ -20,6 +20,7 @@ import 'package:PiliPlus/models_new/live/live_room_info_h5/data.dart';
import 'package:PiliPlus/models_new/live/live_superchat/item.dart'; import 'package:PiliPlus/models_new/live/live_superchat/item.dart';
import 'package:PiliPlus/pages/danmaku/danmaku_model.dart'; import 'package:PiliPlus/pages/danmaku/danmaku_model.dart';
import 'package:PiliPlus/pages/live_room/contribution_rank/controller.dart'; import 'package:PiliPlus/pages/live_room/contribution_rank/controller.dart';
import 'package:PiliPlus/pages/live_room/contribution_rank/view.dart';
import 'package:PiliPlus/pages/live_room/controller.dart'; import 'package:PiliPlus/pages/live_room/controller.dart';
import 'package:PiliPlus/pages/live_room/superchat/superchat_card.dart'; import 'package:PiliPlus/pages/live_room/superchat/superchat_card.dart';
import 'package:PiliPlus/pages/live_room/superchat/superchat_panel.dart'; import 'package:PiliPlus/pages/live_room/superchat/superchat_panel.dart';
@@ -256,6 +257,7 @@ class _LiveRoomPageState extends State<LiveRoomPage>
onPlayAudio: _liveRoomController.queryLiveUrl, onPlayAudio: _liveRoomController.queryLiveUrl,
isPortrait: isPortrait, isPortrait: isPortrait,
liveController: _liveRoomController, liveController: _liveRoomController,
onlineWidget: onlineWidget,
), ),
bottomControl: BottomControl( bottomControl: BottomControl(
plPlayerController: plPlayerController, plPlayerController: plPlayerController,
@@ -492,6 +494,43 @@ class _LiveRoomPageState extends State<LiveRoomPage>
); );
} }
Widget get onlineWidget => GestureDetector(
onTap: _showRank,
child: Obx(() {
if (_liveRoomController.onlineCount.value case final onlineCount?) {
return Text(
'高能观众($onlineCount)',
style: const TextStyle(
fontSize: 12,
color: Colors.white,
),
);
}
return const SizedBox.shrink();
}),
);
void _showRank() {
if (_liveRoomController.ruid case final ruid?) {
final heightFactor = PlatformUtils.isMobile && !isPortrait ? 1.0 : 0.7;
showModalBottomSheet(
context: context,
useSafeArea: true,
clipBehavior: .hardEdge,
isScrollControlled: true,
constraints: const BoxConstraints(maxWidth: 450),
builder: (context) => FractionallySizedBox(
widthFactor: 1.0,
heightFactor: heightFactor,
child: ContributionRankPanel(
ruid: ruid,
roomId: _liveRoomController.roomId,
),
),
);
}
}
PreferredSizeWidget _buildAppBar(bool isFullScreen) { PreferredSizeWidget _buildAppBar(bool isFullScreen) {
final color = Theme.of(context).colorScheme.onSurfaceVariant; final color = Theme.of(context).colorScheme.onSurfaceVariant;
return AppBar( return AppBar(
@@ -542,7 +581,7 @@ class _LiveRoomPageState extends State<LiveRoomPage>
), ),
), ),
), ),
_liveRoomController.onlineWidget, onlineWidget,
], ],
), ),
Row( Row(

View File

@@ -24,6 +24,7 @@ class LiveHeaderControl extends StatefulWidget {
required this.onPlayAudio, required this.onPlayAudio,
required this.isPortrait, required this.isPortrait,
required this.liveController, required this.liveController,
required this.onlineWidget,
}); });
final String? title; final String? title;
@@ -33,6 +34,7 @@ class LiveHeaderControl extends StatefulWidget {
final VoidCallback onPlayAudio; final VoidCallback onPlayAudio;
final bool isPortrait; final bool isPortrait;
final LiveRoomController liveController; final LiveRoomController liveController;
final Widget onlineWidget;
@override @override
State<LiveHeaderControl> createState() => _LiveHeaderControlState(); State<LiveHeaderControl> createState() => _LiveHeaderControlState();
@@ -90,7 +92,7 @@ class _LiveHeaderControlState extends State<LiveHeaderControl>
), ),
), ),
liveController.watchedWidget, liveController.watchedWidget,
liveController.onlineWidget, widget.onlineWidget,
liveController.timeWidget, liveController.timeWidget,
], ],
), ),

View File

@@ -1048,18 +1048,19 @@ class _HeaderTitleState extends State<HeaderTitle> {
overflow: .ellipsis, overflow: .ellipsis,
style: const TextStyle(fontSize: 12, color: Colors.white), style: const TextStyle(fontSize: 12, color: Colors.white),
), ),
Text( if (title.subTitle?.isNotEmpty ?? false)
title.subTitle!, Text(
style: TextStyle( title.subTitle!,
fontSize: 12, style: TextStyle(
fontFamily: Assets.digitalNum, fontSize: 12,
color: title.subTitleColorFormat?.colors?.isNotEmpty == true fontFamily: Assets.digitalNum,
? Utils.parseMedalColor( color: title.subTitleColorFormat?.colors?.isNotEmpty == true
title.subTitleColorFormat!.colors!.last, ? Utils.parseMedalColor(
) title.subTitleColorFormat!.colors!.last,
: Colors.white, )
: Colors.white,
),
), ),
),
], ],
); );
} catch (e, s) { } catch (e, s) {