import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:flutter/material.dart'; Widget liveRcmdPanel( ThemeData theme, bool isDetail, DynamicItemModel item, BuildContext context, { int floor = 1, }) { DynamicLiveModel? liveRcmd = item.modules.moduleDynamic?.major?.liveRcmd; if (liveRcmd == null) { return const SizedBox.shrink(); } return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: StyleString.safeSpace), child: GestureDetector( onTap: () => PageUtils.pushDynDetail(item, floor), child: LayoutBuilder( builder: (context, box) { double width = box.maxWidth; return Stack( clipBehavior: Clip.none, children: [ Hero( tag: liveRcmd.roomId.toString(), child: NetworkImgLayer( width: width, height: width / StyleString.aspectRatio, src: liveRcmd.cover, quality: 40, ), ), PBadge( text: liveRcmd.watchedShow?.textLarge, top: 6, right: 65, fontSize: 10.5, type: PBadgeType.gray, ), if (liveRcmd.liveStatus == 1) Positioned( right: 6, top: 6, child: Image.asset( height: 16, 'assets/images/live/live.gif', filterQuality: FilterQuality.low, ), ) else const PBadge( text: '直播结束', top: 6, right: 6, type: PBadgeType.gray, ), if (liveRcmd.areaName != null) Positioned( left: 0, right: 0, bottom: 0, child: Container( height: 80, alignment: Alignment.bottomLeft, padding: const EdgeInsets.fromLTRB(12, 0, 10, 10), decoration: BoxDecoration( gradient: const LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ Colors.transparent, Colors.black45, ], ), borderRadius: floor == 1 ? const BorderRadius.only( bottomLeft: StyleString.imgRadius, bottomRight: StyleString.imgRadius, ) : const BorderRadius.only( bottomLeft: Radius.circular(6), bottomRight: Radius.circular(6), ), ), child: Text( liveRcmd.areaName!, style: TextStyle( fontSize: theme.textTheme.labelMedium!.fontSize, color: Colors.white, ), ), ), ), ], ); }, ), ), ), const SizedBox(height: 6), if (liveRcmd.title != null) Padding( padding: const EdgeInsets.symmetric( horizontal: StyleString.safeSpace, ), child: Text( liveRcmd.title!, maxLines: isDetail ? null : 1, style: const TextStyle(fontWeight: FontWeight.bold), overflow: isDetail ? null : TextOverflow.ellipsis, ), ), const SizedBox(height: 2), ], ); }