Compare commits

...

3 Commits

2 changed files with 56 additions and 35 deletions

View File

@ -58,12 +58,12 @@ class _ExpensePageState extends State<ExpensePage> {
// if the Widgets are expecting RecurringTrackedType, but we // if the Widgets are expecting RecurringTrackedType, but we
// need to be using Frequency? Change to only have one abstract // need to be using Frequency? Change to only have one abstract
// class and make it nully again? Hmmm... // class and make it nully again? Hmmm...
if (curr is RecurringTrackedType) { //if (curr is RecurringTrackedType && curr.frequency != null) {
itemAmount = itemAmount =
"${curr.amount.toStringAsFixed(2)} ${curr.frequency.title}"; "${curr.amount.toStringAsFixed(2)} ${curr.frequency.title}";
} else { /*} else {
itemAmount = curr.amount.toStringAsFixed(2); itemAmount = curr.amount.toStringAsFixed(2);
} }*/
final String itemDescription = curr.description; final String itemDescription = curr.description;
final double itemDayAmount = final double itemDayAmount =
@ -180,7 +180,7 @@ class _ExpensePageState extends State<ExpensePage> {
Expanded( Expanded(
child: Center( child: Center(
child: Text( child: Text(
curr.description, itemDescription,
style: TextStyle( style: TextStyle(
fontSize: 12.0, fontSize: 12.0,
), ),

View File

@ -3,9 +3,7 @@ import 'package:flutter/material.dart';
// Local // Local
import 'package:flutter_expense_tracker/db.dart'; import 'package:flutter_expense_tracker/db.dart';
import 'package:flutter_expense_tracker/models/asset.dart'; import 'package:flutter_expense_tracker/models/tracked_type_recurring.dart';
import 'package:flutter_expense_tracker/models/expense.dart';
import 'package:flutter_expense_tracker/models/income.dart';
/// TODO: /// TODO:
/// - Expenses (total number, totals by day / month / year) /// - Expenses (total number, totals by day / month / year)
@ -25,34 +23,16 @@ class ProjectionPage extends StatefulWidget {
} }
class _ProjectionPageState extends State<ProjectionPage> { class _ProjectionPageState extends State<ProjectionPage> {
late Future<List<Expense>> expenses;
late Future<List<Income>> incomes;
late Future<List<Asset>> 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget expenseSummary = SummaryCardForTotals(
list: DatabaseHelper.instance.getExpenses(),
summaryTypeLabel: "Expense",
);
return ListView( return ListView(
children: [ children: [
SummaryCard( expenseSummary,
name: "Expense Totals",
leftText: "left",
middleText: "middle",
rightText: "right",
),
SummaryCard( SummaryCard(
name: "Income Totals", name: "Income Totals",
leftText: "left", leftText: "left",
@ -70,6 +50,43 @@ class _ProjectionPageState extends State<ProjectionPage> {
} }
} }
class SummaryCardForTotals extends StatelessWidget {
const SummaryCardForTotals({
super.key,
required this.list,
required this.summaryTypeLabel,
});
final Future<List<RecurringTrackedType>> list;
final String summaryTypeLabel;
@override
Widget build(BuildContext context) {
return FutureBuilder<List<RecurringTrackedType>>(
future: list,
builder: (
BuildContext context,
AsyncSnapshot<List<RecurringTrackedType>> 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 { class SummaryCard extends StatelessWidget {
const SummaryCard({ const SummaryCard({
super.key, super.key,
@ -91,14 +108,18 @@ class SummaryCard extends StatelessWidget {
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Column( child: Column(
children: [ children: [
Center(
child: Text(name),
),
Row( Row(
children: [ children: [
Text(leftText), Text(leftText),
Spacer(), Spacer(),
Text(middleText), Center(
child: Column(
children: [
Text(name),
Text(middleText),
],
),
),
Spacer(), Spacer(),
Text(rightText), Text(rightText),
], ],