728x90
반응형
매주 월요일 회의, 매달 1일 결제일, 매년 생일.
캘린더 앱에서 반복되는 일정은 피할 수 없는 기능이다.
이번 글에서는 Flutter에서 “매주”, “매달” 반복되는 이벤트를 어떻게 구현할 수 있을지 정리한다.
📌 반복 이벤트의 구조 설계
이벤트 객체에 반복 유형을 추가한다:
enum RepeatType { none, daily, weekly, monthly }
class Event {
final String title;
final DateTime date;
final RepeatType repeat;
bool isDone;
Event({
required this.title,
required this.date,
this.repeat = RepeatType.none,
this.isDone = false,
});
}
반복 없는 기본 이벤트 외에 weekly, monthly 등 다양한 반복 패턴을 명시할 수 있다.
📅 table_calendar에서 반복 처리하기
eventLoader에서 반복 조건을 고려하여 표시 이벤트를 확장한다.
List<Event> getEventsForDay(DateTime day) {
return allEvents.where((event) {
if (event.repeat == RepeatType.none) {
return isSameDay(event.date, day);
} else if (event.repeat == RepeatType.weekly) {
return event.date.weekday == day.weekday;
} else if (event.repeat == RepeatType.monthly) {
return event.date.day == day.day;
}
return false;
}).toList();
}
- 매주 반복: 요일이 같으면 해당 주에 표시
- 매달 반복: 일(day)이 같으면 매달 표시
🧾 반복 설정 UI 만들기
DropdownButton<RepeatType>(
value: selectedRepeat,
onChanged: (value) {
setState(() {
selectedRepeat = value!;
});
},
items: RepeatType.values.map((type) {
return DropdownMenuItem(
value: type,
child: Text(type.toString().split('.').last),
);
}).toList(),
)
이벤트 작성 시 반복 유형을 선택할 수 있도록 Dropdown을 제공한다.
📌 저장 구조 팁
- 반복 이벤트는 로컬 DB 저장 시
repeat필드를 함께 저장 - 반복 해제를 원할 경우
endDate추가 고려 - 특정 날짜만 제외하기(예외 처리)는 고급 기능에서 다루자
🧘 마무리하며
반복되는 일정은 당연히 있어야 할 기능이지만, 구조적으로는 꽤 까다롭다.
Flutter로 만드는 캘린더 앱에서도 단순히 반복 조건만 잘 정리해두면 유연하게 관리할 수 있다.
일정은 반복되지만, 구현은 깔끔하게.
✍️ 이 글은 터미널 밖으로 나온 개발자의 Flutter 캘린더 앱 만들기 여정입니다.
728x90
반응형
'Flutter > Flutter 캘린더 앱 만들기' 카테고리의 다른 글
| 서버와 동기화 — Google Calendar API 연동하기 (0) | 2025.06.06 |
|---|---|
| 다크 모드 캘린더 디자인 적용 (0) | 2025.06.05 |
| 할 일 완료 체크 및 삭제 기능 추가 (2) | 2025.06.03 |
| 이벤트 알림 기능 — Flutter Local Notification 활용하기 (0) | 2025.06.02 |
| 오늘 날짜 강조 및 마커 표시 기능 구현하기 (1) | 2025.06.01 |
