import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import '../../transactions/models/transaction.dart'; class TransactionListItem extends StatelessWidget { final Transaction transaction; const TransactionListItem({ super.key, required this.transaction, }); @override Widget build(BuildContext context) { final bool isIncome = transaction.amount > 0; return Card( elevation: 0, margin: const EdgeInsets.symmetric(vertical: 8), child: Padding( padding: const EdgeInsets.all(12.0), child: Row( children: [ // Category icon Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: _getCategoryColor(transaction.category).withAlpha((0.1 * 255).toInt()), borderRadius: BorderRadius.circular(8), ), child: Icon( _getCategoryIcon(transaction.category), color: _getCategoryColor(transaction.category), ), ), const SizedBox(width: 12), // Transaction details Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( transaction.description, style: const TextStyle( fontWeight: FontWeight.w600, fontSize: 16, ), ), Text( DateFormat('MMM dd, yyyy • h:mm a').format(transaction.date), style: TextStyle( color: Colors.grey[600], fontSize: 12, ), ), ], ), ), // Amount Text( '${isIncome ? '+' : ''}${transaction.amount.toStringAsFixed(2)} USD', style: TextStyle( fontWeight: FontWeight.bold, fontSize: 16, color: isIncome ? Colors.green : Colors.red, ), ), ], ), ), ); } Color _getCategoryColor(String category) { switch (category.toLowerCase()) { case 'food & drink': return Colors.orange; case 'shopping': return Colors.purple; case 'transportation': return Colors.blue; case 'utilities': return Colors.red; case 'income': return Colors.green; default: return Colors.grey; } } IconData _getCategoryIcon(String category) { switch (category.toLowerCase()) { case 'food & drink': return Icons.restaurant; case 'shopping': return Icons.shopping_bag; case 'transportation': return Icons.directions_car; case 'utilities': return Icons.power; case 'income': return Icons.attach_money; default: return Icons.category; } } }