2024. 12. 26. 08:58ㆍ같이 공부합시다 - Flutter/Flutter로 To-Do 앱 만들기
안녕하세요! 스테디빌더 입니다. 😊
지난 글에서는 캘린더에서 원하는 날짜를 누르고
할 일을 추가할 때의 문제를 해결 했었죠.
Flutter 캘린더 모달에서 선택한 날짜로 할 일 추가하기: 문제 해결 가이드
안녕하세요! 😊 지난 글에서는 캘린더에서 선택한 날짜의 상세 화면에 할 일 추가 버튼을 만들었죠. 2024.12.24 - [같이 공부합시다 - Flutter/Flutter로 To-Do 앱 만들기] - Flutter 캘린더 모달에서 할 일
steadybuilder.tistory.com
이번에도 발생된 문제를 해결하는 글이예요 ㅎㅎ
재미없죠… 압니다… 그래도 마무리를 해야겠죠? ㅠ^ㅠ
정확한 데이터 설계 없이 되는대로,
Flutter로 To-Do 리스트 앱을 개발하다 보니,
이런저런 오류가 많이 발생되는 것 같네요.
😫😫😫
이번에는 캘린더 모달에서 할 일을 추가할 때
모달이 계속 중첩되는 문제가 발생했습니다.
네, 중첩… 모달이 계속 열린다는 거죠. 후..
😱😱😱
이번 글에서는,
캘린더 모달에서 선택한 날짜의 할 일을 추가할 때
발생되는 모달 중첩 문제를 해결하는 방법 !
도움이 될까 모르겠지만 한 번 함께해 보겠습니다.
아 참고로 이번에는 굉장히 쉬운 해결이예요,
이런 실수를 해서 부끄러울 지경이네요 😫

오늘 다룰 내용
- 모달 중첩 문제란?
- 문제의 원인
- 중첩 방지를 위한 코드 수정
- UI/UX 개선 팁
1. 모달 중첩 문제란?
캘린더 모달에서 특정 날짜를 선택한 후 할 일을 추가하면
기존 모달이 닫히지 않고 새로운 모달이 계속 열리면서
화면에 여러 개의 모달이 겹쳐지는 문제가 발생했습니다.
이런 문제가 발생하면:
- 화면이 복잡해지고, 사용자가 어느 모달을 닫아야 할지 헷갈릴 수 있습니다.
- 앱의 동작이 매끄럽지 않아 사용자 경험(UX)이 떨어지게 됩니다.
- 일단 반복해서 닫아야 하므로 귀찮아서 앱을 꺼버릴 수도 있습니다. 😱😱😱
2. 문제의 원인
중복 호출
_showTasksForSelectedDay 메서드에서:
- 새로운 모달이 열릴 때 기존 모달을 닫지 않았던게 원인으로 확인됩니다.
- 반복적으로 할 일을 추가할 때마다 새로운 모달이 열리면서 중첩되었어요. 😱😱😱
3. 중첩 방지를 위한 코드 수정
핵심 아이디어
- 기존 모달 닫기: Navigator.of(context).pop()을 호출해 기존 모달을 닫고, 새로운 모달을 열도록 수정합니다.
- 중첩 방지: 모달을 닫고 새로 열리는 로직을 명확히 작성합니다.
수정된 _showTasksForSelectedDay 메서드
void _showTasksForSelectedDay() {
final selectedDateTasks = _getEventsForDay(_selectedDay ?? DateTime.now());
// 기존 모달 닫기 후 새로운 모달 열기
Navigator.of(context).pop(); // 기존 모달 닫기
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (context) {
return Container(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// 상단: 제목과 닫기 버튼
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${_selectedDay != null ? _selectedDay!.toLocal().toString().split(' ')[0] : '오늘'} 일자의 할 일',
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
IconButton(
icon: const Icon(Icons.close),
onPressed: () => Navigator.of(context).pop(),
),
],
),
const Divider(),
// 중간: 할 일 목록
selectedDateTasks.isEmpty
? const Center(
child: Text(
'할 일이 없습니다!',
style: TextStyle(
fontSize: 16, fontWeight: FontWeight.bold),
),
)
: Expanded(
child: ListView.builder(
itemCount: selectedDateTasks.length,
itemBuilder: (context, index) {
final task = selectedDateTasks[index];
return Card(
elevation: 4.0,
margin: const EdgeInsets.symmetric(vertical: 8.0),
child: ListTile(
title: Text(
task,
style: const TextStyle(fontSize: 16),
),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: const Icon(Icons.edit,
color: Colors.blueAccent),
onPressed: () {
_showEditTodoDialog(
context,
_todoList.indexWhere(
(item) => item['task'] == task));
},
),
IconButton(
icon: const Icon(Icons.delete,
color: Colors.redAccent),
onPressed: () {
setState(() {
_deleteTodoItem(_todoList.indexWhere(
(item) => item['task'] == task));
});
Navigator.of(context).pop();
_showTasksForSelectedDay(); // 목록 갱신
},
),
],
),
),
);
},
),
),
// 하단: "할 일 추가" 버튼
Padding(
padding: const EdgeInsets.only(top: 16.0),
child: ElevatedButton.icon(
icon: const Icon(Icons.add),
label: const Text('할 일 추가'),
onPressed: () {
_showAddTodoDialog(context);
}),
),
],
),
);
},
);
}
주요 변경점
- 기존 모달 닫기:
- Navigator.of(context).pop()으로 기존 모달을 닫고 새로운 모달을 엽니다.
- 모달 중첩 방지:
- 새로운 모달이 열리기 전에 기존 모달을 닫기 때문에 중첩 문제가 해결됩니다.
4. UI/UX 개선 팁
- 할 일 추가 후 목록 자동 갱신:
- 할 일을 추가한 후 setState를 사용해 목록이 즉시 갱신되도록 구현하면 사용자 경험이 더 좋아집니다.
- 애니메이션 효과 활용:
- 모달이 열리고 닫힐 때 애니메이션 효과를 추가해 동작이 더 자연스럽게 보이도록 개선할 수 있습니다.
결과 확인
문제 해결 후 기대 동작
- 캘린더 모달에서 특정 날짜를 선택:
- 기존 모달이 닫히고 새로운 모달이 열립니다.
- 반복적으로 할 일 추가:
- 중첩 없이 한 번에 하나의 모달만 열리며, 목록이 갱신됩니다.
- UI 깔끔 유지:
- 중복된 모달이 사라져 화면이 깔끔해지고 사용자 경험이 향상됩니다.
결론
이제 캘린더 모달에서 모달 중첩 문제를 해결하고,
할 일을 추가할 때 매끄럽게 동작하도록 개선되었습니다.
작은 변화이지만, 사용자에게는 크게
버그로 다가올 수도 있던 부분이었죠.
사용자 경험을 크게 향상시킬 수 있는
중요한 수정이에요! 😊
다음 글에서는 뭔가 새로운 기능이나
로직을 추가하고 싶지만,
아직도 남은 문제점들이 있어요. 😱😱😱
캘린더에서 날짜별 할 일을 추가하고,
이를 다시 삭제할 때 발생되는
오류를 다뤄보겠습니다.
궁금한 점이나 개선 아이디어가 있다면
댓글로 꼭 남겨주세요.
오늘도 고생하셨습니다 !
끝 !
'같이 공부합시다 - Flutter > Flutter로 To-Do 앱 만들기' 카테고리의 다른 글
Flutter로 메인 화면에서 오늘 할 일 추가, 캘린더 모달에서는 선택된 날짜로 추가하기 (+메인/캘린더 할 일 추가 동작을 분리하는 방법) (5) | 2024.12.28 |
---|---|
Flutter 캘린더 모달에서 안전한 할 일 삭제: 오류 해결 및 UI 개선 가이드 (11) | 2024.12.27 |
Flutter 캘린더 모달에서 선택한 날짜로 할 일 추가하기: 문제 해결 가이드 (7) | 2024.12.24 |
Flutter 캘린더 모달에서 할 일을 추가하는 방법: 편리한 To-Do 관리 기능 구현하기 (5) | 2024.12.24 |
Flutter로 캘린더에서 선택한 날짜의 할 일 상세 보기 구현하기 (81) | 2024.12.23 |