From 58102bab02eb71756a2709205c4ee10223be1ca4 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Wed, 19 Feb 2025 17:25:36 -0700 Subject: [PATCH] Add the expense totals! Yay! Still trying to center the totals part with the monthly part across all sections properly. --- lib/pages/report.dart | 80 ++++++++++++++++++++++++++++--------------- 1 file changed, 52 insertions(+), 28 deletions(-) diff --git a/lib/pages/report.dart b/lib/pages/report.dart index 6e73725..b8e6764 100644 --- a/lib/pages/report.dart +++ b/lib/pages/report.dart @@ -6,6 +6,7 @@ import 'package:flutter_expense_tracker/db.dart'; import 'package:flutter_expense_tracker/models/asset.dart'; import 'package:flutter_expense_tracker/models/expense.dart'; import 'package:flutter_expense_tracker/models/income.dart'; +import 'package:flutter_expense_tracker/models/tracked_type_recurring.dart'; /// TODO: /// - Expenses (total number, totals by day / month / year) @@ -25,34 +26,16 @@ class ProjectionPage extends StatefulWidget { } class _ProjectionPageState extends State { - late Future> expenses; - late Future> incomes; - late Future> assets; - - @override - void initState() { - super.initState(); - /***** Load DB Data *****/ - // Expenses - expenses = DatabaseHelper.instance.getExpenses(); - - // Income - //incomes = DatabaseHelper.instance.getIncomes(); - - // Assets - //assets = DatabaseHelper.instance.getAssets(); - } - @override Widget build(BuildContext context) { + Widget expenseSummary = SummaryCardForTotals( + list: DatabaseHelper.instance.getExpenses(), + summaryTypeLabel: "Expense", + ); + return ListView( children: [ - SummaryCard( - name: "Expense Totals", - leftText: "left", - middleText: "middle", - rightText: "right", - ), + expenseSummary, SummaryCard( name: "Income Totals", leftText: "left", @@ -70,6 +53,43 @@ class _ProjectionPageState extends State { } } +class SummaryCardForTotals extends StatelessWidget { + const SummaryCardForTotals({ + super.key, + required this.list, + required this.summaryTypeLabel, + }); + + final Future> list; + final String summaryTypeLabel; + + @override + Widget build(BuildContext context) { + return FutureBuilder>( + future: list, + builder: ( + BuildContext context, + AsyncSnapshot> snapshot, + ) { + if (!snapshot.hasData) { + return Text('Loading $summaryTypeLabel Section...'); + } + double dailyTotal = 0, monthlyTotal = 0, yearlyTotal = 0; + for (RecurringTrackedType e in snapshot.data!) { + dailyTotal += e.calcComparableAmountDaily(); + monthlyTotal += e.calcComparableAmountYearly() / 12; + yearlyTotal += e.calcComparableAmountYearly(); + } + return SummaryCard( + name: "$summaryTypeLabel Totals", + leftText: "${dailyTotal.toStringAsFixed(2)} Daily", + middleText: "${monthlyTotal.toStringAsFixed(2)} Monthly", + rightText: "${yearlyTotal.toStringAsFixed(2)} Yearly", + ); + }); + } +} + class SummaryCard extends StatelessWidget { const SummaryCard({ super.key, @@ -91,14 +111,18 @@ class SummaryCard extends StatelessWidget { padding: const EdgeInsets.all(8.0), child: Column( children: [ - Center( - child: Text(name), - ), Row( children: [ Text(leftText), Spacer(), - Text(middleText), + Center( + child: Column( + children: [ + Text(name), + Text(middleText), + ], + ), + ), Spacer(), Text(rightText), ],