mirror of
https://github.com/nisrulz/flutter-examples.git
synced 2025-11-09 04:58:58 +00:00
Added: expanse planner app
This commit is contained in:
65
expense_planner/lib/widgets/chart.dart
Normal file
65
expense_planner/lib/widgets/chart.dart
Normal file
@@ -0,0 +1,65 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import './chart_bar.dart';
|
||||
import '../models/transaction.dart';
|
||||
|
||||
class Chart extends StatelessWidget {
|
||||
final List<Transaction> recentTransactions;
|
||||
|
||||
Chart(this.recentTransactions);
|
||||
|
||||
List<Map<String, Object>> get groupedTransactionValues {
|
||||
return List.generate(7, (index) {
|
||||
final weekDay = DateTime.now().subtract(
|
||||
Duration(days: index),
|
||||
);
|
||||
var totalSum = 0.0;
|
||||
|
||||
for (var i = 0; i < recentTransactions.length; i++) {
|
||||
if (recentTransactions[i].date.day == weekDay.day &&
|
||||
recentTransactions[i].date.month == weekDay.month &&
|
||||
recentTransactions[i].date.year == weekDay.year) {
|
||||
totalSum += recentTransactions[i].amount;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
'day': DateFormat.E().format(weekDay).substring(0, 1),
|
||||
'amount': totalSum,
|
||||
};
|
||||
}).reversed.toList();
|
||||
}
|
||||
|
||||
double get totalSpending {
|
||||
return groupedTransactionValues.fold(0.0, (sum, item) {
|
||||
return sum + item['amount'];
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Card(
|
||||
elevation: 6,
|
||||
margin: EdgeInsets.all(20),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(10),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: groupedTransactionValues.map((data) {
|
||||
return Flexible(
|
||||
fit: FlexFit.tight,
|
||||
child: ChartBar(
|
||||
data['day'],
|
||||
data['amount'],
|
||||
totalSpending == 0.0
|
||||
? 0.0
|
||||
: (data['amount'] as double) / totalSpending,
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user