From 0cbf7772200e593baa3905dff48f01d323bdde60 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Thu, 13 Jul 2023 12:02:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E7=9B=B4=E6=92=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/dynamics/controller.dart | 17 +++ .../dynamics/widgets/live_rcmd_panel.dart | 105 ++++++++++-------- lib/pages/dynamics/widgets/up_panel.dart | 12 +- lib/pages/liveRoom/controller.dart | 13 ++- lib/pages/liveRoom/view.dart | 19 ++-- 5 files changed, 105 insertions(+), 61 deletions(-) diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 27a54297..6318dbc4 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -6,6 +6,7 @@ import 'package:pilipala/http/search.dart'; import 'package:pilipala/models/common/dynamics_type.dart'; import 'package:pilipala/models/dynamics/result.dart'; import 'package:pilipala/models/dynamics/up.dart'; +import 'package:pilipala/models/live/item.dart'; import 'package:pilipala/utils/utils.dart'; class DynamicsController extends GetxController { @@ -119,6 +120,22 @@ class DynamicsController extends GetxController { Get.toNamed('/dynamicDetail', arguments: {'item': item, 'floor': floor}); break; + case 'DYNAMIC_TYPE_LIVE_RCMD': + DynamicLiveModel liveRcmd = item.modules.moduleDynamic.major.liveRcmd; + ModuleAuthorModel author = item.modules.moduleAuthor; + LiveItemModel liveItem = LiveItemModel.fromJson({ + 'title': liveRcmd.title, + 'uname': author.name, + 'cover': liveRcmd.cover, + 'mid': author.mid, + 'face': author.face, + 'roomid': liveRcmd.roomId, + }); + Get.toNamed('/liveRoom?roomid=${liveItem.roomId}', arguments: { + 'liveItem': liveItem, + 'heroTag': liveItem.roomId.toString() + }); + break; } } diff --git a/lib/pages/dynamics/widgets/live_rcmd_panel.dart b/lib/pages/dynamics/widgets/live_rcmd_panel.dart index 41167259..0a0a82f6 100644 --- a/lib/pages/dynamics/widgets/live_rcmd_panel.dart +++ b/lib/pages/dynamics/widgets/live_rcmd_panel.dart @@ -1,13 +1,20 @@ import 'package:flutter/material.dart'; +import 'package:get/get.dart'; import 'package:pilipala/common/constants.dart'; +import 'package:pilipala/common/widgets/badge.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; +import 'package:pilipala/models/dynamics/result.dart'; +import 'package:pilipala/pages/dynamics/index.dart'; import 'package:pilipala/utils/utils.dart'; import 'rich_node_panel.dart'; +final DynamicsController _dynamicsController = Get.put(DynamicsController()); Widget liveRcmdPanel(item, context, {floor = 1}) { TextStyle authorStyle = TextStyle(color: Theme.of(context).colorScheme.primary); + int liveStatus = item.modules.moduleDynamic.major.liveRcmd.liveStatus; + DynamicLiveModel liveRcmd = item.modules.moduleDynamic.major.liveRcmd; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -51,59 +58,67 @@ Widget liveRcmdPanel(item, context, {floor = 1}) { const SizedBox(height: 6), ], GestureDetector( - onTap: () {}, + onTap: () { + _dynamicsController.pushDetail(item, floor); + }, child: LayoutBuilder(builder: (context, box) { double width = box.maxWidth; return Stack( children: [ - NetworkImgLayer( - type: floor == 1 ? 'emote' : null, - width: width, - height: width / StyleString.aspectRatio, - src: item.modules.moduleDynamic.major.liveRcmd.cover, + Hero( + tag: liveRcmd.roomId.toString(), + child: NetworkImgLayer( + type: floor == 1 ? 'emote' : null, + width: width, + height: width / StyleString.aspectRatio, + src: item.modules.moduleDynamic.major.liveRcmd.cover, + ), ), + pBadge( + liveStatus == 1 ? '直播中' : '直播结束', context, 6, 6, null, null), Positioned( - left: 0, - right: 0, - bottom: 0, - child: Container( - height: 80, - padding: const EdgeInsets.fromLTRB(12, 0, 10, 10), - clipBehavior: Clip.hardEdge, - decoration: BoxDecoration( - gradient: const LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Colors.transparent, - Colors.black45, + left: 0, + right: 0, + bottom: 0, + child: Container( + height: 80, + padding: const EdgeInsets.fromLTRB(12, 0, 10, 10), + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration( + gradient: const LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Colors.transparent, + Colors.black45, + ], + ), + borderRadius: floor == 1 + ? null + : const BorderRadius.all(Radius.circular(6))), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + DefaultTextStyle.merge( + style: TextStyle( + fontSize: Theme.of(context) + .textTheme + .labelMedium! + .fontSize, + color: Colors.white), + child: Row( + children: [ + Text(item.modules.moduleDynamic.major.liveRcmd + .areaName ?? + ''), ], ), - borderRadius: floor == 1 - ? null - : const BorderRadius.all(Radius.circular(6))), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - DefaultTextStyle.merge( - style: TextStyle( - fontSize: Theme.of(context) - .textTheme - .labelMedium! - .fontSize, - color: Colors.white), - child: Row( - children: [ - Text(item.modules.moduleDynamic.major.liveRcmd - .areaName ?? - ''), - ], - ), - ), - ], - ), - )), + ), + ], + ), + ), + ), ], ); }), diff --git a/lib/pages/dynamics/widgets/up_panel.dart b/lib/pages/dynamics/widgets/up_panel.dart index e57a7481..d36f7b30 100644 --- a/lib/pages/dynamics/widgets/up_panel.dart +++ b/lib/pages/dynamics/widgets/up_panel.dart @@ -4,6 +4,7 @@ import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; import 'package:pilipala/models/dynamics/up.dart'; +import 'package:pilipala/models/live/item.dart'; import 'package:pilipala/pages/dynamics/controller.dart'; import 'package:pilipala/utils/storage.dart'; @@ -148,7 +149,16 @@ class _UpPanelState extends State { setState(() {}); } else if (data.type == 'live') { - SmartDialog.showToast('直播功能暂未开发'); + LiveItemModel liveItem = LiveItemModel.fromJson({ + 'title': data.title, + 'uname': data.uname, + 'face': data.face, + 'roomid': data.roomId, + }); + Get.toNamed( + '/liveRoom?rooid=${data.roomId}', + arguments: {'liveItem': liveItem}, + ); } }, child: Padding( diff --git a/lib/pages/liveRoom/controller.dart b/lib/pages/liveRoom/controller.dart index 6ede0ede..5cabcb71 100644 --- a/lib/pages/liveRoom/controller.dart +++ b/lib/pages/liveRoom/controller.dart @@ -20,12 +20,13 @@ class LiveRoomController extends GetxController { @override void onInit() { super.onInit(); - var args = Get.arguments['liveItem']; - liveItem = args; - print(liveItem.roomId); - roomId = liveItem.roomId!; - if (args.pic != null && args.pic != '') { - cover = args.cover; + if (Get.arguments != null) { + var args = Get.arguments['liveItem']; + liveItem = args; + roomId = liveItem.roomId!; + if (args.pic != null && args.pic != '') { + cover = args.cover; + } } queryLiveInfo(); } diff --git a/lib/pages/liveRoom/view.dart b/lib/pages/liveRoom/view.dart index b79dff4e..8aed0583 100644 --- a/lib/pages/liveRoom/view.dart +++ b/lib/pages/liveRoom/view.dart @@ -91,15 +91,16 @@ class _LiveRoomPageState extends State { controller: _meeduPlayerController!, ), ), - Container( - color: Theme.of(context).colorScheme.background, - height: 45, - padding: const EdgeInsets.only(left: 12, right: 12), - child: Row(children: [ - Text( - _liveRoomController.liveItem.watchedShow['text_large']), - ]), - ), + if (_liveRoomController.liveItem.watchedShow != null) + Container( + color: Theme.of(context).colorScheme.background, + height: 45, + padding: const EdgeInsets.only(left: 12, right: 12), + child: Row(children: [ + Text(_liveRoomController + .liveItem.watchedShow['text_large']), + ]), + ), ], ), )