import 'package:expense_planner/widgets/chart_bar.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import '../models/transaction.dart'; class Chart extends StatelessWidget { const Chart({Key? key, required this.transactions}) : super(key: key); final List transactions; List> get groupedTransactions { return List.generate(7, (index) { final weekDay = DateTime.now().subtract(Duration(days: index)); double totalSum = 0; for (var transaction in transactions) { if (transaction.date.day == weekDay.day && transaction.date.month == weekDay.month && transaction.date.year == weekDay.year) { totalSum += transaction.amount; } } return { 'day': DateFormat.E().format(weekDay).substring(0, 1).toUpperCase(), 'amount': totalSum, }; }).reversed.toList(); } double get maxSpending { return groupedTransactions.fold( 0.0, (sum, transaction) => sum + (transaction['amount'] as double)); } @override Widget build(BuildContext context) { return Card( elevation: 1, margin: EdgeInsets.all(10), child: Padding( padding: EdgeInsets.all(5), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: groupedTransactions.map((data) { return Flexible( fit: FlexFit.tight, child: ChartBar( label: (data['day'] as String), amount: (data['amount'] as double), spendingPercentTotal: maxSpending == 0.0 ? 0.0 : (data['amount'] as double) / maxSpending, ), ); }).toList(), ), ), ); } }