본문 바로가기
Project/네모진 투두

[Flutter] 일정 관리 앱 일정 완료 처리 기능 – 네모진 투두

by NAIMJAE 2025. 4. 8.

Ⅰ 일정 완료 처리 설계 방향

‘네모진 투두’ 앱에서 일정 완료 처리 기능은 단순한 체크 여부를 넘어서, 반복 일정과 세부 일정까지 고려한 설계가 필요했다. 비정기 일정은 체크박스를 클릭하면 바로 완료/미완료 상태만 처리하면 됐지만, 반복 일정은 설계가 조금 다르다. 반복 일정은 repeat_task 테이블에서 일괄 관리되며, 완료 처리가 되었을 때만 task 테이블로 복사되는 구조로 설계했기 때문이다.

여기에 더해 하나의 일정 안에 세부 일정 항목들까지 포함되는 구조다 보니, 세부 항목을 완료할 때도 task 테이블에 복사될 수 있게 조건을 정교하게 다듬을 필요가 있었다. 그래서 "체크박스를 한 번 클릭했을 때 어떤 조건에서 어떤 동작을 해야 하는가?"를 플로우 차트로 정리하고, 코드에서도 이 흐름을 최대한 명확하게 구현하려 했다.

결과적으로는 다양한 조건문을 통해 모든 경우의 수를 빠짐없이 고려한 상태에서 일정/반복일정/세부일정 각각에 대해 안정적인 완료 처리가 가능하도록 구현할 수 있었다.

 

 

Ⅱ 일정 완료 처리 로직 분기 조건 정리

이 일정 관리 앱에서 조합할 수 있는 일정의 경우는 총 4가지이다.

  • 비정기 일정
  • 비정기 일정 + 세부 항목
  • 반복 일정
  • 반복 일정 + 세부 항목

세부 항목이 없는 비정기 일정

  • 세부 항목이 없을 경우, 체크박스를 클릭하면 단순히 완료 상태로 전환되도록 처리하면 된다.

세부 항목이 있는 비정기 일정

  • 세부 항목이 존재하는 경우, 부모 일정의 체크박스로는 상태 전환이 불가능
  • 세부 일정들의 완료 여부를 기준으로 부모 일정의 상태를 판단

세부 항목이 없는 반복 일정

  • 체크 박스 클릭 시 완료 상태 전환 처리와 동시에
  • [완료 → 미완료 변경] → task 테이블에서 해당 데이터를 삭제
  • [미완료 → 완료 변경] → repeat_task 테이블의 정보를 복사 → task 테이블에 추가

세부 항목이 있는 반복 일정

  • 세부 항목이 존재하는 경우, 부모 일정의 체크박스로는 상태 전환이 불가능
  • 세부 일정들의 완료 여부를 기준으로 부모 일정의 상태를 판단
  • [완료 → 미완료 변경] → 모든 세부 항목이 미완료 상태 → task 테이블에서 해당 데이터를 삭제
  • [미완료 → 완료 변경] → 모든 세부 항목 중 첫 번째로 완료 상태 → repeat_task 테이블의 정보를 복사 → task 테이블에 추가

 

Ⅲ 일정 완료 처리 로직

 

위에서 설명한 대로 반복 일정과 비정기 일정은 완료 처리 방식에 차이가 있다.

반복 일정은 repeat_tasktask 테이블을 분리하여 관리하기 때문에, 완료 여부에 따라 DB에서 데이터를 삭제하거나 복사해야 하고, 비정기 일정은 단순한 완료 상태 전환 처리만 하면 된다.

 

반복 일정 완료 처리 (왼쪽 Flow)

  • 조건 1 : 세부 항목이 존재하지 않는 경우
    • 완료된 일정 → 미완료 처리 + 데이터베이스 삭제
    • 미완료된 일정 → 완료 처리 + 데이터베이스 추가
  • 조건 2 : 세부 항목이 존재하는 경우
    • 세부 항목이 존재하는 경우 일정의 체크 박스 버튼 클릭으로 상태 수정 불가능
    • 세부 항목의 체크 박스를 통해 일정의 완료 상태 결정
    • 모든 세부 항목이 완료되면 해당 일정도 완료 처리
    • 세부 항목에 미완료 항목이 있으면 해당 일정도 미완료 처리

 

비정기 일정 완료 처리 (오른쪽 Flow)

  • 조건 1 : 세부 항목이 존재하지 않는 경우
    • 완료된 일정 → 미완료 처리
    • 미완료된 일정 → 완료 처리
  • 조건 2 : 세부 항목이 존재하는 경우
    • 세부 항목이 존재하는 경우 일정의 체크 박스 버튼 클릭으로 상태 수정 불가능
    • 세부 항목의 체크 박스를 통해 일정의 완료 상태 결정
    • 모든 세부 항목이 완료되면 해당 일정도 완료 처리
    • 세부 항목에 미완료 항목이 있으면 해당 일정도 미완료 처리

 

Ⅳ 세부 항목 완료 처리 로직

 

세부 항목의 경우 완료 상태 전환한 후 다른 세부 항목들의 상태를 확인하여, 부모 일정의 상태 변화가 필요한지 확인해야 한다. 또한 해당 세부 항목이 반복 일정의 세부 항목인 경우 데이터베이스에서 삭제할지 추가할지도 함께 확인해야 한다.

 

반복 일정의 세부 항목 완료 처리 (왼쪽 Flow)

  • 먼저 클릭한 세부 항목의 완료 상태를 전환시킨다.
  • 완료 → 미완료
    • 조건 : 클릭한 세부 항목 외 다른 세부 항목들의 상태 확인
      • 모든 세부 항목이 미완료 상태인 경우 데이터베이스 삭제
      • 다른 모든 세부 항목이 완료 상태인 경우 부모 일정 미완료 처리
  • 미완료 → 완료
    • 조건 : 클릭한 세부 항목 외 다른 세부 항목들의 상태 확인
      • 모든 세부 항목이 미완료 상태인 경우 데이터베이스 추가
      • 다른 모든 세부 항목이 완료 상태인 경우 부모 일정 완료 처리

 

비정기 일정의 세부 사항 완료 처리 (오른쪽 Flow)

  • 먼저 클릭한 세부 항목의 완료 상태를 전환시킨다.
  • 완료 → 미완료
    • 조건 : 클릭한 세부 항목의 부모 일정 상태 확인
      • 부모 일정이 완료 상태인 경우 부모 일정 미완료 처리
  • 미완료 → 완료
    • 조건 : 클릭한 세부 항목 외 다른 세부 항목들의 상태 확인
      • 다른 모든 세부 항목이 완료 상태인 경우 부모 일정 완료 처리