Start creating the reports as a break from making the Expense page usable for all 3. Still considering whether to just have 1 main abstract class with a nully Frequency.

This commit is contained in:
Hyperling 2025-02-14 08:49:44 -07:00
parent d35c250913
commit 0b4937b141

View File

@ -1,5 +1,12 @@
// Flutter
import 'package:flutter/material.dart';
// Local
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';
/// TODO:
/// - Expenses (total number, totals by day / month / year)
/// - Incomes (total number, totals by day / month / year)
@ -8,13 +15,97 @@ import 'package:flutter/material.dart';
/// - 1 week, 1 month, 1 quarter, 1 year
/// - 1/2 year? 2 years? 5 years? Allow customization?
class ProjectionPage extends StatelessWidget {
class ProjectionPage extends StatefulWidget {
const ProjectionPage({
super.key,
});
@override
State<ProjectionPage> createState() => _ProjectionPageState();
}
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
Widget build(BuildContext context) {
return Placeholder();
return ListView(
children: [
SummaryCard(
name: "Expense Totals",
leftText: "left",
middleText: "middle",
rightText: "right",
),
SummaryCard(
name: "Income Totals",
leftText: "left",
middleText: "middle",
rightText: "right",
),
SummaryCard(
name: "Asset Totals",
leftText: "left",
middleText: "middle",
rightText: "right",
),
],
);
}
}
class SummaryCard extends StatelessWidget {
const SummaryCard({
super.key,
required this.name,
required this.leftText,
required this.middleText,
required this.rightText,
});
final String name;
final String leftText;
final String middleText;
final String rightText;
@override
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Center(
child: Text(name),
),
Row(
children: [
Text(leftText),
Spacer(),
Text(middleText),
Spacer(),
Text(rightText),
],
),
],
),
),
);
}
}