import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:food_hub_app/models/recipe.dart'; class RecipeCard extends StatelessWidget { final Recipe recipe; const RecipeCard({super.key, required this.recipe}); @override Widget build(BuildContext context) { return Card( elevation: 0, color: Colors.white, clipBehavior: Clip.antiAlias, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.network( recipe.recordList[0].imageUrl, height: 200, width: double.infinity, fit: BoxFit.contain, errorBuilder: (context, error, stackTrace) => Container( height: 200, color: Colors.grey[200], child: const Icon(Icons.food_bank, color: Colors.grey), ), ), const Divider( height: 1, thickness: 1, color: Colors.green, indent: 0, endIndent: 0, ), Padding( padding: const EdgeInsets.all(10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( recipe.name, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.bold, ), maxLines: 1, // 限制单行,避免挤压按钮 overflow: TextOverflow.ellipsis, ), ), Row( children: [ IconButton( icon: const Icon(Icons.edit, size: 14), color: Colors.white, style: ButtonStyle( backgroundColor: WidgetStateProperty.all( Colors.green, ), shape: WidgetStateProperty.all(CircleBorder()), minimumSize: WidgetStateProperty.all(Size(20, 20)), ), onPressed: () {}, ), IconButton( icon: const Icon(Icons.book, size: 14), color: Colors.white, style: ButtonStyle( backgroundColor: WidgetStateProperty.all( Colors.green, ), shape: WidgetStateProperty.all(CircleBorder()), minimumSize: WidgetStateProperty.all(Size(20, 20)), ), onPressed: () {}, ), ], ), ], ), const SizedBox(height: 5), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Row( children: [ _buildIconText( icon: Icons.food_bank, text: recipe.category, color: Colors.green, ), const SizedBox(width: 12), _buildIconText( icon: Icons.thumb_up_alt_outlined, text: recipe.likeCount.toString(), color: Colors.red, ), const SizedBox(width: 12), _buildIconText( icon: Icons.star_outline, text: recipe.favouriteCount.toString(), color: Colors.blue, ), const SizedBox(width: 12), _buildIconText( icon: Icons.comment_outlined, text: recipe.commentCount.toString(), color: Colors.deepOrange, ), ], ), Row( children: [ _buildIconText( icon: Icons.date_range, text: recipe.recordList[0].date, color: Colors.red, ), ], ), ], ), ], ), ), ], ), ); } // 通用图标文本组件 Widget _buildIconText({ required IconData icon, required String text, Color color = Colors.grey, // 默认灰色 double iconSize = 16, double textSize = 16, double spacing = 2, // 图标与文本间距 }) { return Row( children: [ Icon(icon, size: iconSize, color: color), SizedBox(width: spacing), Text(text, style: TextStyle(fontSize: textSize, color: color)), ], ); } }