From 3e1772ad57fd1786ef168385d06a571589de811c Mon Sep 17 00:00:00 2001 From: jjoonleo Date: Mon, 11 May 2026 19:34:26 +0900 Subject: [PATCH] fix: hide schedule marker on selected date --- .../calendar/screens/calendar_screen.dart | 8 +++++ .../home/components/month_calendar.dart | 8 +++++ .../calendar/schedule_marker_builder.dart | 14 ++++++++ .../schedule_marker_builder_test.dart | 35 +++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 lib/presentation/shared/components/calendar/schedule_marker_builder.dart create mode 100644 test/presentation/shared/components/calendar/schedule_marker_builder_test.dart diff --git a/lib/presentation/calendar/screens/calendar_screen.dart b/lib/presentation/calendar/screens/calendar_screen.dart index ee8cacbd..7864c1b6 100644 --- a/lib/presentation/calendar/screens/calendar_screen.dart +++ b/lib/presentation/calendar/screens/calendar_screen.dart @@ -13,6 +13,7 @@ import 'package:on_time_front/presentation/calendar/component/schedule_detail.da import 'package:on_time_front/presentation/schedule_create/screens/schedule_create_screen.dart'; import 'package:on_time_front/presentation/schedule_create/screens/schedule_edit_screen.dart'; import 'package:on_time_front/presentation/shared/components/calendar/centered_calendar_header.dart'; +import 'package:on_time_front/presentation/shared/components/calendar/schedule_marker_builder.dart'; import 'package:on_time_front/presentation/shared/components/two_button_delete_dialog.dart'; import 'package:on_time_front/presentation/shared/theme/calendar_theme.dart'; import 'package:on_time_front/presentation/shared/theme/theme.dart'; @@ -295,6 +296,13 @@ class _CalendarScreenState extends State { .headerStyle.rightChevronIcon, ); }, + markerBuilder: (context, day, events) { + return selectedDayScheduleMarkerBuilder( + selectedDay: _selectedDate, + day: day, + events: events, + ); + }, selectedBuilder: (context, day, focusedDay) { return Container( margin: const EdgeInsets.all(2.0), diff --git a/lib/presentation/home/components/month_calendar.dart b/lib/presentation/home/components/month_calendar.dart index b1795808..646dd7a8 100644 --- a/lib/presentation/home/components/month_calendar.dart +++ b/lib/presentation/home/components/month_calendar.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:on_time_front/presentation/calendar/bloc/monthly_schedules_bloc.dart'; import 'package:on_time_front/presentation/shared/components/calendar/centered_calendar_header.dart'; +import 'package:on_time_front/presentation/shared/components/calendar/schedule_marker_builder.dart'; import 'package:on_time_front/presentation/shared/theme/calendar_theme.dart'; import 'package:table_calendar/table_calendar.dart'; @@ -169,6 +170,13 @@ class _MonthCalendarState extends State { rightIcon: calendarTheme.headerStyle.rightChevronIcon, ); }, + markerBuilder: (context, day, events) { + return selectedDayScheduleMarkerBuilder( + selectedDay: _selectedDay, + day: day, + events: events, + ); + }, selectedBuilder: (context, day, focusedDay) { return Container( margin: const EdgeInsets.all(4.0), diff --git a/lib/presentation/shared/components/calendar/schedule_marker_builder.dart b/lib/presentation/shared/components/calendar/schedule_marker_builder.dart new file mode 100644 index 00000000..52b0638c --- /dev/null +++ b/lib/presentation/shared/components/calendar/schedule_marker_builder.dart @@ -0,0 +1,14 @@ +import 'package:flutter/widgets.dart'; +import 'package:table_calendar/table_calendar.dart'; + +Widget? selectedDayScheduleMarkerBuilder({ + required DateTime selectedDay, + required DateTime day, + required List events, +}) { + if (events.isNotEmpty && isSameDay(selectedDay, day)) { + return const SizedBox.shrink(); + } + + return null; +} diff --git a/test/presentation/shared/components/calendar/schedule_marker_builder_test.dart b/test/presentation/shared/components/calendar/schedule_marker_builder_test.dart new file mode 100644 index 00000000..24d74610 --- /dev/null +++ b/test/presentation/shared/components/calendar/schedule_marker_builder_test.dart @@ -0,0 +1,35 @@ +import 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:on_time_front/presentation/shared/components/calendar/schedule_marker_builder.dart'; + +void main() { + test('hides schedule marker when the day is selected', () { + final marker = selectedDayScheduleMarkerBuilder( + selectedDay: DateTime(2026, 5, 11), + day: DateTime(2026, 5, 11, 9), + events: const [Object()], + ); + + expect(marker, isA()); + }); + + test('uses the default marker when a scheduled day is not selected', () { + final marker = selectedDayScheduleMarkerBuilder( + selectedDay: DateTime(2026, 5, 11), + day: DateTime(2026, 5, 12), + events: const [Object()], + ); + + expect(marker, isNull); + }); + + test('uses the default empty-day behavior when there are no events', () { + final marker = selectedDayScheduleMarkerBuilder( + selectedDay: DateTime(2026, 5, 11), + day: DateTime(2026, 5, 11), + events: const [], + ); + + expect(marker, isNull); + }); +}