코딩강의/expense_tracker(플러터-유데미)
~128. Adding Alternative Constructor Functions & Filtering Lists
김마드
2023. 9. 6. 17:03
1. 같은 카테고리에 있는 비용들을 합쳐보자
model에 해당 로직들을 추가해보자
- expense.dart (models 폴더)
import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart';
import 'package:intl/intl.dart';
final formatter = DateFormat.yMd();
const uuid = Uuid();
enum Category { food, travel, leisure, work }
const categoryIcons = {
Category.food: Icons.lunch_dining,
Category.travel: Icons.flight_takeoff,
Category.leisure: Icons.movie,
Category.work: Icons.work,
};
class Expense {
Expense({
required this.title,
required this.amount,
required this.date,
required this.category,
}) : id = uuid.v4();
final String id;
final String title;
final double amount;
final DateTime date;
final Category category;
String get formattedDate {
return formatter.format(date);
}
}
class ExpenseBucket {
ExpenseBucket({
required this.category,
required this.expenses,
});
ExpenseBucket.forCategory(List<Expense> allExpenses, this.category)
: expenses = allExpenses
.where((expense) => expense.category == category)
.toList();
final Category category;
final List<Expense> expenses;
double get totalExpenses {
double sum = 0;
for (final expense in expenses) {
sum += expense.amount; // sum = sum + expense.amount;
}
return sum;
}
}
1) 소수점이 리턴되는 get 함수 부분 확인
for in 구문을 활용해서 expenses 리스트의 각 각의 amount를 합산해줌
2) ExpenseBucket.forCategory로 추가로 생성자 함수를 만들어 준 후, 인자로 받는 allExpenses 리스트 값에서 인자로 받는 category 값과 동일한 allExpenses에 있는 category만을 추출하여 리스트화함