import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:okane/database/collections/recurrent.dart'; import 'package:okane/ui/state/core.dart'; class UpcomingTransactionsCard extends StatelessWidget { const UpcomingTransactionsCard({super.key}); @override Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { final today = DateTime.now(); final upcomingRaw = state.recurringTransactions.where((t) { if (t.lastExecution == null) { return true; } return today.difference(t.lastExecution!).inDays <= (t.days * 1.5).toInt(); }).toList(); final List upcoming = upcomingRaw.isEmpty ? List.empty() : upcomingRaw.sublist(0, min(upcomingRaw.length, 3)); final transactions = upcoming.isEmpty ? [ Text( "No upcoming transactions", style: Theme.of(context).textTheme.bodyLarge, ), ] : upcoming .map( (t) => ListTile( title: Text( "${t.template.value!.name} (${t.template.value!.amount}€)", ), subtitle: Text( "Due in ${today.difference(t.lastExecution ?? today).inDays} days", ), leading: Icon( t.template.value!.amount < 0 ? Icons.remove : Icons.add, color: t.template.value!.amount < 0 ? Colors.red : Colors.green, ), trailing: IconButton( icon: Icon(Icons.play_arrow), onPressed: () {}, ), ), ) .toList(); return Card( child: Padding( padding: const EdgeInsets.all(16), child: Column( children: [ Text( "Upcoming Transactions", style: Theme.of(context).textTheme.titleLarge, ), ] + transactions, ), ), ); }, ); } }