import 'package:flutter/material.dart'; import '../../domain/catalog/catalog_item.dart'; class CatalogCard extends StatelessWidget { const CatalogCard({super.key, required this.item, required this.onTap}); final CatalogItem item; final VoidCallback onTap; @override Widget build(BuildContext context) { final dc = item.displayCategory; return Semantics( label: '${dc.label} 카테고리. ${item.title}. ${item.summary}', button: true, child: Card( clipBehavior: Clip.antiAlias, child: InkWell( onTap: onTap, child: Padding( padding: const EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Row( children: [ Icon(dc.icon, size: 18), const SizedBox(width: 6), Expanded( child: Text( item.title, style: Theme.of(context).textTheme.titleMedium, maxLines: 1, overflow: TextOverflow.ellipsis, ), ), ], ), if (item.titleEn != null) ...[ const SizedBox(height: 2), Text( item.titleEn!, style: Theme.of(context).textTheme.bodySmall?.copyWith( color: Colors.grey, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ], const SizedBox(height: 8), Expanded( child: Text( item.summary, style: Theme.of(context).textTheme.bodySmall, maxLines: 3, overflow: TextOverflow.ellipsis, ), ), if (item.evidenceStrength != null) ...[ const SizedBox(height: 6), _EvidenceBadge(strength: item.evidenceStrength!), ], ], ), ), ), ), ); } } class _EvidenceBadge extends StatelessWidget { const _EvidenceBadge({required this.strength}); final String strength; @override Widget build(BuildContext context) { final (label, color) = switch (strength) { 'strong_rct' || 'strong' => ('근거 강함', Colors.green), 'meta_analysis' => ('메타분석', Colors.teal), 'moderate' => ('근거 중간', Colors.blue), 'observational' => ('관찰연구', Colors.blueGrey), 'mechanistic' => ('기전', Colors.orange), 'expert_opinion' => ('전문가 의견', Colors.brown), 'mixed' => ('근거 혼재', Colors.amber), 'weak' => ('근거 약함', Colors.grey), _ => (strength, Colors.grey), }; return Container( padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), decoration: BoxDecoration( color: color.withValues(alpha: 0.15), border: Border.all(color: color), borderRadius: BorderRadius.circular(4), ), child: Text( label, style: TextStyle(fontSize: 11, color: color), ), ); } }