import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import '../../data/models/expense.dart'; import '../../data/models/group.dart'; import 'expense_detail_dialog.dart'; class ExpensesTab extends StatelessWidget { final List expenses; final Group group; const ExpensesTab({ super.key, required this.expenses, required this.group, }); @override Widget build(BuildContext context) { if (expenses.isEmpty) { return const Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.receipt_long, size: 80, color: Colors.grey), SizedBox(height: 16), Text( 'Aucune dépense', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), SizedBox(height: 8), Text( 'Ajoutez votre première dépense', style: TextStyle(fontSize: 14, color: Colors.grey), ), ], ), ); } return ListView.builder( padding: const EdgeInsets.all(16), itemCount: expenses.length, itemBuilder: (context, index) { final expense = expenses[index]; return _buildExpenseCard(context, expense); }, ); } Widget _buildExpenseCard(BuildContext context, Expense expense) { final isDark = Theme.of(context).brightness == Brightness.dark; final dateFormat = DateFormat('dd/MM/yyyy'); return Card( margin: const EdgeInsets.only(bottom: 12), child: InkWell( onTap: () => _showExpenseDetail(context, expense), borderRadius: BorderRadius.circular(12), child: Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Container( width: 48, height: 48, decoration: BoxDecoration( color: isDark ? Colors.blue[900] : Colors.blue[100], borderRadius: BorderRadius.circular(12), ), child: Icon( expense.category.icon, color: Colors.blue, ), ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( expense.description, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Text( 'Payé par ${expense.paidByName}', style: TextStyle( fontSize: 14, color: isDark ? Colors.grey[400] : Colors.grey[600], ), ), Text( dateFormat.format(expense.date), style: TextStyle( fontSize: 12, color: isDark ? Colors.grey[500] : Colors.grey[500], ), ), ], ), ), Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( '${expense.amount.toStringAsFixed(2)} ${expense.currency.symbol}', style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: Colors.green, ), ), if (expense.currency != ExpenseCurrency.eur) Text( '${expense.amountInEur.toStringAsFixed(2)} €', style: TextStyle( fontSize: 12, color: isDark ? Colors.grey[400] : Colors.grey[600], ), ), ], ), ], ), ), ), ); } void _showExpenseDetail(BuildContext context, Expense expense) { showDialog( context: context, builder: (context) => ExpenseDetailDialog( expense: expense, group: group, ), ); } }