import 'package:flutter/material.dart'; import '../../Controller/account_controller.dart'; import '../../Controller/transaction_controller.dart'; import '../../Entities/drift_database.dart'; import '../../Repositories/transaction_repository.dart'; /// Eine Liste mit den zuletzt getätigten Transaktionen class RecentTransactionsList extends StatefulWidget { /// Erstellt eine neue Instanz dieser Klasse const RecentTransactionsList({super.key}); @override State createState() => _RecentTransactionsListState(); } class _RecentTransactionsListState extends State { final TransactionController _transactionController = TransactionController(); final AccountController _accountController = AccountController(); final TransactionRepository _transactionRepository = TransactionRepository(); @override void initState() { super.initState(); _transactionController.transactions.addListener(() { if (mounted) { setState(() {}); } }); } @override Widget build(final BuildContext context) { final Future> recentTransactions = _transactionRepository .findBy( account: _accountController.selected.value, dateTo: DateTime.now(), limit: 5, orderBy: 'dateDesc', ); return FutureBuilder( future: recentTransactions, builder: ( final BuildContext context, final AsyncSnapshot> snapshot, ) { final ThemeData theme = Theme.of(context); if (snapshot.hasData) { final List? recentTransactionsWidgetList = snapshot.data ?.map( (final Transaction transaction) => Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: ListTile( contentPadding: EdgeInsets.zero, title: Text(transaction.name), trailing: Text( '${transaction.amount.abs().toStringAsFixed(2)} €', style: TextStyle( color: transaction.amount == 0 ? null : (transaction.amount < 0 ? Colors.green : Colors.red), fontWeight: FontWeight.bold, ), ), ), ), ) .toList(); return Column(children: [...?recentTransactionsWidgetList]); } else if (snapshot.hasError) { return Column( children: [ Icon(Icons.error, color: theme.colorScheme.error), const Text('Fehler beim holen der letzten Transaktionen!'), ], ); } else { return const Center(child: CircularProgressIndicator()); } }, ); } }