refactor: decouple calendar screens from route-driven reload

This commit is contained in:
qzl
2026-03-20 15:34:44 +08:00
parent 0476f7f80c
commit 8883248968
6 changed files with 229 additions and 45 deletions
@@ -8,7 +8,7 @@ import '../../../../core/di/injection.dart';
import '../../../../core/theme/design_tokens.dart';
import '../../../../shared/widgets/app_pressable.dart';
import '../../data/models/schedule_item_model.dart';
import '../../data/services/calendar_service.dart';
import '../../data/services/calendar_repository.dart';
import '../calendar_state_manager.dart';
import '../calendar_time_utils.dart';
import '../utils/event_color_resolver.dart';
@@ -67,25 +67,18 @@ class _CalendarDayWeekScreenState extends State<CalendarDayWeekScreen>
WidgetsBinding.instance.addPostFrameCallback((_) {
_scrollToSelectedDate();
_setupRouteListener();
});
}
void _setupRouteListener() {
final router = GoRouter.of(context);
router.routerDelegate.addListener(_onRouteChange);
}
void _onRouteChange() {
_loadEvents();
}
void _updateMonthDates() {
_monthDates = monthDatesFor(_selectedDate);
}
Future<void> _loadEvents() async {
final events = await sl<CalendarService>().getEventsForDay(_selectedDate);
Future<void> _loadEvents({bool forceRefresh = false}) async {
final events = await sl<CalendarRepository>().getDayEvents(
_selectedDate,
forceRefresh: forceRefresh,
);
if (!mounted) {
return;
}
@@ -96,9 +89,6 @@ class _CalendarDayWeekScreenState extends State<CalendarDayWeekScreen>
@override
void dispose() {
try {
GoRouter.of(context).routerDelegate.removeListener(_onRouteChange);
} catch (_) {}
WidgetsBinding.instance.removeObserver(this);
_dayStripController.dispose();
super.dispose();
@@ -107,7 +97,7 @@ class _CalendarDayWeekScreenState extends State<CalendarDayWeekScreen>
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
_loadEvents();
_loadEvents(forceRefresh: true);
}
}