import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/image/image_save.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/search/result.dart'; import 'package:PiliPlus/utils/date_util.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:flutter/material.dart'; class SearchPgcItem extends StatelessWidget { const SearchPgcItem({ super.key, required this.item, }); final SearchPgcItemModel item; @override Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); const TextStyle style = TextStyle(fontSize: 13); return Material( type: MaterialType.transparency, child: InkWell( onTap: () => PageUtils.viewPgc(seasonId: item.seasonId), onLongPress: () => imageSaveDialog( title: item.title.map((item) => item.text).join(), cover: item.cover, ), child: Padding( padding: const EdgeInsets.symmetric( horizontal: StyleString.safeSpace, vertical: StyleString.cardSpace, ), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Stack( clipBehavior: Clip.none, children: [ NetworkImgLayer( width: 111, height: 148, src: item.cover, ), PBadge( text: item.seasonTypeName, top: 6.0, right: 4.0, bottom: null, left: null, ), ], ), const SizedBox(width: 10), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 4), Text.rich( TextSpan( children: item.title .map( (e) => TextSpan( text: e.text, style: TextStyle( color: e.isEm ? theme.colorScheme.primary : theme.colorScheme.onSurface, ), ), ) .toList(), ), ), const SizedBox(height: 12), Text('评分:${item.mediaScore?['score']}', style: style), Row( children: [ if (item.areas?.isNotEmpty == true) Text(item.areas!, style: style), const SizedBox(width: 3), const Text('·'), const SizedBox(width: 3), Text( DateUtil.dateFormat(item.pubtime), style: style, ), ], ), Row( children: [ if (item.styles?.isNotEmpty == true) Text(item.styles!, style: style), const SizedBox(width: 3), const Text('·'), const SizedBox(width: 3), if (item.indexShow?.isNotEmpty == true) Text(item.indexShow!, style: style), ], ), ], ), ), ], ), ), ), ); } }