반응형
스터디에서 진행하고 있는 하루지출 만들기
지금 내 코드의 문제점은 List의 값이 매일 초기화 하지 않는 것이다.
그 부분에 있어서 어제 많은 도움을 받았다.
건우님은 모델을 따로 만들지 않았고
건별로 입력되는 지출 값을 todayMoneyList[i][0] 인덱스 위치 값으로 값을 받았다.
그 값을 토대로 값이 입력되는 save 함수에는 + 를 하고 delete 함수에는-를 실행해서 합계를 구하도록 만들었다.
void saveDifference(int innerSum, String sign) {
for (int i = 0; i < db.todayMoneyList.length; i++) {
if (sign == '+') {
innerSum += int.parse(db.todayMoneyList[i][0]);
} else if (sign == '-') {
innerSum -= int.parse(db.todayMoneyList[i][0]);
}
}
db.dailySum = innerSum.abs();
}
void saveNewMoney() {
// add new money to todays money list
setState(() {
db.todayMoneyList.add([_newMoneyNameController.text, false]);
saveDifference(innerSum, '+');
_myBox.put("INNER_SUM", innerSum);
});
// clear textfield
_newMoneyNameController.clear();
// pop dialog box
Navigator.of(context).pop();
db.updateDatabase();
}
void deleteMoney(int index) {
setState(() {
db.todayMoneyList.removeAt(index);
// getSign('-');
saveDifference(innerSum, '-');
_myBox.put("INNER_SUM", innerSum);
});
db.updateDatabase();
}
그리고 여기서 계산된 innerSum은 모델 클래스에 있는 dailySum으로 저장이 된다.
이렇게 하면 매일 입력된 값이 추후에도 저장이 되게끔 한다
또 가장 중요한 부분이 새로운 날이 시작 되었을 때는 아무것도 보여주지 않는 것이다.
새로운 날이 시작되었을 때는 오늘 입력되는 값만 보여주게 한다.
percent 계산되는 함수에 아까 입력한 합산금액과 목표금액을 불러와서 같이 계산이 되게 만든다.
이러면 새로운 날의 보여지는 리스트는 오늘 것만 나오고, 이전 값들은
void calculateMoneyPercentages() {
_myBox.get("DAILY_SUM");
_myBox.get("TARGET_SUM");
print(dailySum);
print(targetSum);
// _myBox.put("DAILY_SUM", dailySum);
이 코드를 통해서 계산되어 heatmap에 표시가 된다.
class Money {
List todayMoneyList = [];
Map<DateTime, int> heatMapDateSet = {};
int targetSum = 0;
int dailySum = 0;
String sign = '+';
// create initial default data
void createDefaultData() {
todayMoneyList = [];
_myBox.put("START_DATE", todaysDateFormatted());
}
// load data if it already exists
void loadData() {
// if it's a new day, get money list from database
if (_myBox.get(todaysDateFormatted()) == null) {
}
// if it's not a new day, load todays list
else {
todayMoneyList = _myBox.get(todaysDateFormatted());
dailySum = _myBox.get("DAILY_SUM");
targetSum = _myBox.get("TARGET_SUM");
}
}
// update database
void updateDatabase() {
// update todays entry
_myBox.put(todaysDateFormatted(), todayMoneyList);
// update universal money list in case it changed (new money, edit money, delete money)
_myBox.put("CURRENT_MONEY_LIST", todayMoneyList);
_myBox.put("DAILY_SUM", dailySum);
_myBox.put("TARGET_SUM", targetSum);
// calculate money complete percentages for each day
calculateMoneyPercentages();
// load heat map
loadHeatMap();
}
void calculateMoneyPercentages() {
_myBox.get("DAILY_SUM");
_myBox.get("TARGET_SUM");
print(dailySum);
print(targetSum);
// _myBox.put("DAILY_SUM", dailySum);
String percent = '';
if (todayMoneyList.isEmpty) {
percent = '0.0';
} else {
if (dailySum <= targetSum) {
percent = (dailySum / targetSum).toStringAsFixed(1);
print("uP -> $percent");
} else {
percent = (targetSum / dailySum).toStringAsFixed(1);
print("down -> $percent");
}
}
// key: "PERCENTAGE_SUMMARY_yyyymmdd"
// value: string of 1db number between 0.0 ~ 1.0 inclusive
_myBox.put("PERCENTAGE_SUMMARY_${todaysDateFormatted()}", percent);
}
자 이해를 해보았으니 코드를 적용시켜봐야겠다.
728x90
반응형
'완료한 프로젝트 > 프로젝트 3 : 하루지출' 카테고리의 다른 글
하루지출 - 건우님의 완성 (0) | 2023.03.31 |
---|---|
하루 지출 진행상황 : 뻘짓2 (0) | 2023.02.07 |
하루 지출 진행상황 : 2.6 새로운 날 시작되면 리스트 초기화 실패 (0) | 2023.02.06 |
하루지출 진행상황 : 23.2.5, 모델 클래스 실패 ? (0) | 2023.02.05 |
하루 지출 진행상황 23.2.3 -> hive 모델 클래스 사용 (0) | 2023.02.03 |