본문 바로가기

완료한 프로젝트/프로젝트 3 : 하루지출

하루지출 진행상황 : 건우님 코드 참고하기

반응형

 

스터디에서 진행하고 있는 하루지출 만들기 

 

지금 내 코드의 문제점은 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
반응형