feat: 动态跳转直播
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,17 +58,24 @@ 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(
|
||||
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,
|
||||
@ -103,7 +117,8 @@ Widget liveRcmdPanel(item, context, {floor = 1}) {
|
||||
),
|
||||
],
|
||||
),
|
||||
)),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}),
|
||||
|
@ -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<UpPanel> {
|
||||
|
||||
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(
|
||||
|
@ -20,13 +20,14 @@ class LiveRoomController extends GetxController {
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
if (Get.arguments != null) {
|
||||
var args = Get.arguments['liveItem'];
|
||||
liveItem = args;
|
||||
print(liveItem.roomId);
|
||||
roomId = liveItem.roomId!;
|
||||
if (args.pic != null && args.pic != '') {
|
||||
cover = args.cover;
|
||||
}
|
||||
}
|
||||
queryLiveInfo();
|
||||
}
|
||||
|
||||
|
@ -91,13 +91,14 @@ class _LiveRoomPageState extends State<LiveRoomPage> {
|
||||
controller: _meeduPlayerController!,
|
||||
),
|
||||
),
|
||||
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']),
|
||||
Text(_liveRoomController
|
||||
.liveItem.watchedShow['text_large']),
|
||||
]),
|
||||
),
|
||||
],
|
||||
|
Reference in New Issue
Block a user