mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-06-01 00:28:18 +08:00
@@ -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(() {
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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,
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user