CS/Flutter | Dart

캘린더 일정관리 앱 #7

damzzi 2023. 8. 23. 05:06

home_screen.dart

앱에서 2023년 8월 23일자에 일정 하나를 저장했다

값이 제대로 저장되었다

 

일정을 등록한 날을 누르면 해당 일정이 제대로 보이고

해당 일정을 등록하지 않은 날을 누르면 일정이 보이지 않는다

투데이배너에 스케줄 값은 아직 수정해주지 않아 임의로 넣어둔 6이 뜬다

카테고리 색상도 마찬가지 ㅎㅅㅎ

 

 

 

if (snapshot.hasData) {
  schedules = snapshot.data!
      .where((element) => element.date.toUtc() == selectedDate)
      .toList();
}

하지만 이런 식으로 필터링 수행할 경우 모든 일정을 다 불러온다는 문제가 있다

메모리에 모든 정보가 다 올라간다는 것을 뜻한다(낭비)

 

-> 애초에 쿼리 날려 정보 가져올 때 필요한 정보만 가져오게 하자!

Stream<List<Schedule>> watchSchedules(DateTime date) {
  // final query = select(schedules);
  // query.where((tbl) => tbl.date.equals(date));
  // return query.watch();
  return (select(schedules)..where((tbl) => tbl.date.equals(date))).watch();
} // 스케줄 테이블에 넣어준 date 칼럼이 현재 가진 date와 같으면 넣어줌

주석 처리한 3줄과 리턴문은 같은 기능을 한다

 

 

 

home_screen.dart

일정 없을 때 등등 설정도 해주긔

"There are no events on that date."

 

 

 

drift_database.dart

일정과 색상을 함께 관리(?)할 수 있도록 수정했다

map()을 두 번 해주어 각 row의 스케줄과 카테고리 색상을 가져올 수 있게 했다

 

 

schedule_card.dart

ㅎ.. 다 수정했다고 생각했는데 일정별 지정한 카테고리색상이 안뜨고 임의로 지정한 색상만 뜨길래

ㅇㅡㅇ .. 요상태로 20분동안 관련 코드 죄다 확인했는데

일정카드 카테고리 클래스 코드에서 color: 임의 색상.. 일케 해놔서

임의 색상 값을 외부에서 받아오는 color값으로 변경해주니 되었다..

역시 뚫어지게 코드 보는 게 답..

 

 

 

지정한 카테고리 색상이 잘 나온다

귀여워..

 

 

 

drift_database.dart

일정을 여러 개 추가할 시 일정을 시간 순대로 오름차순 정리하는 기능을 추가했다

데이터베이스 쿼리로 해줄 수 있다

query.orderBy([
  OrderingTerm.asc(schedules.startTime), //시작시간 오름차순으로 일정 정리
]);

 

 

 

today_banner.dart

일정 개수를 snapshot의 data 길이만큼으로 수정했다

투데이배너에 스케줄 수가 제대로 나온다

 

 

 

 

drift_database.dart

removeSchedule() => delete(schedules).go(); //schedules 테이블에 있는 모든 row 삭제

 

home_screen.dart

스케줄카드(일정) 삭제하기

스케줄카드를 읽는 방향과 반대로(오른쪽 -> 왼쪽) 스와이프하면 삭제된다

direction: DismissDirection.endToStart,
//읽는 방향과 반대로 스와이프했을 때 삭제
onDismissed: (DismissDirection direction){
  //실제 삭제됐을 때 onDismissed 실행
  GetIt.I<LocalDatabase>().removeSchedule(scheduleWithColor.schedule.id);
},

오른쪽에서 왼쪽으로 스와이프해 삭제했다

그에 따라 일정 개수도 바뀌는 걸 볼 수 있다

 

 

 

custom_textField.dart

텍스트필드 이것저것 조금은 정신없게~~ 구현해버리기

시간인지 내용인지에따라 알맞은 서픽스도 설정해보고..

힌트도 줘보고..

다음 시간은 프젝 완전 끝이다!