// Author: fruit.com.cn import 'package:flutter/material.dart'; import '../../../core/data/models/drama.dart'; import '../../../core/formatting/count_format.dart'; import '../../../core/theme/app_colors.dart'; import '../../../core/theme/app_dimens.dart'; import '../../../core/widgets/remote_image.dart'; import '../../../l10n/app_localizations.dart'; import '../../home/widgets/home_drama_classification.dart'; class RecommendSectionCard extends StatelessWidget { const RecommendSectionCard({ super.key, required this.sectionKey, required this.drama, required this.onTap, }); final String sectionKey; final Drama drama; final VoidCallback onTap; @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; return SizedBox( width: 122, child: InkWell( key: Key('recommend-card-$sectionKey-${drama.id}'), borderRadius: BorderRadius.circular(AppDimens.homeCardRadius), onTap: onTap, child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ ClipRRect( borderRadius: BorderRadius.circular(AppDimens.homeCardRadius), child: AspectRatio( aspectRatio: 3 / 4, child: Stack( fit: StackFit.expand, children: [ RemoteImage( drama.posterUrl, fit: BoxFit.cover, showFallbackIcon: true, fallbackColor: AppColors.contentSurface, ), if (isHotDrama(drama)) Positioned( top: AppDimens.spaceXs, left: AppDimens.spaceXs, child: Container( key: Key('recommend-hot-$sectionKey-${drama.id}'), padding: const EdgeInsets.symmetric( horizontal: 6, vertical: 2, ), decoration: BoxDecoration( color: AppColors.badgeHot, borderRadius: BorderRadius.circular( AppDimens.chipRadius, ), ), child: Text( l10n.homeBadgeHot, style: const TextStyle( color: AppColors.textPrimary, fontSize: AppDimens.homeCardBadge, fontWeight: FontWeight.w700, ), ), ), ), ], ), ), ), const SizedBox(height: AppDimens.spaceXs), Row( children: [ const Icon( Icons.play_arrow_rounded, color: AppColors.textSecondary, size: AppDimens.homeCardMeta, ), Text( formatInteractionCount(drama.viewCount), style: const TextStyle( color: AppColors.textSecondary, fontSize: AppDimens.homeCardMeta, ), ), ], ), const SizedBox(height: 2), Text( drama.title, key: Key('recommend-title-$sectionKey-${drama.id}'), maxLines: 2, overflow: TextOverflow.ellipsis, style: const TextStyle( color: AppColors.textPrimary, fontSize: AppDimens.homeCardTitle, fontWeight: FontWeight.w600, height: 1.25, ), ), ], ), ), ); } }