Begin making the Expense page more arbitrary for future re-use by creating superclasses which will fit all 3 object use cases.

This commit is contained in:
2025-02-11 14:33:38 -07:00
parent 7a3eaf70b5
commit ab9b3e0bf9
4 changed files with 91 additions and 55 deletions
+11 -38
View File
@@ -1,51 +1,24 @@
import '/models/recurring_tracked_type.dart';
import '/models/frequency.dart';
class Expense {
final int? id;
final String name;
final double cost;
final Frequency frequency;
final String description;
class Expense extends RecurringTrackedType {
static String amountText = "Cost";
const Expense({
this.id,
required this.name,
required this.cost,
required this.frequency,
required this.description,
Expense({
super.id,
required super.name,
required super.amount,
required super.frequency,
required super.description,
});
@override
String toString() {
//return "$name, $cost, ${frequency.title}, $description";
return toMap().toString();
}
double calcComparableCost() {
return cost * frequency.timesPerYear;
}
double calcComparableCostDaily() {
return cost / frequency.numDays;
}
factory Expense.fromMap(Map<String, dynamic> json) => Expense(
id: json['id'],
name: json['name'],
cost: json['cost'],
amount: json['cost'],
frequency: Frequency.values
.where((expense) => expense.title == json['frequency'])
.where((freq) => freq.title == json['frequency'])
.first,
description: json['description'],
);
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'cost': cost,
'frequency': frequency.title,
'description': description,
};
}
}