feat: 动态跳转直播

This commit is contained in:
guozhigq
2023-07-13 12:02:30 +08:00
parent 3f457aa7f6
commit 0cbf777220
5 changed files with 105 additions and 61 deletions

View File

@ -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;
}
}

View File

@ -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: <Color>[
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: <Color>[
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 ??
''),
],
),
),
],
),
)),
),
],
),
),
),
],
);
}),

View File

@ -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(

View File

@ -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();
}

View File

@ -91,15 +91,16 @@ class _LiveRoomPageState extends State<LiveRoomPage> {
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']),
]),
),
],
),
)