From 177ed616bfc87bda146498f3261da3cc380669e1 Mon Sep 17 00:00:00 2001 From: qzl Date: Wed, 11 Mar 2026 17:32:00 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0=20iOS/Android=20?= =?UTF-8?q?=E7=9B=B8=E6=9C=BA=E5=92=8C=E7=9B=B8=E5=86=8C=E6=9D=83=E9=99=90?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/android/app/src/main/AndroidManifest.xml | 5 +++ apps/ios/Runner/Info.plist | 4 +++ .../ui/screens/calendar_dayweek_screen.dart | 23 +++++++------ .../ui/screens/calendar_month_screen.dart | 23 +++++++------ .../ui/widgets/create_event_sheet.dart | 32 ++++++++++++++++--- 5 files changed, 59 insertions(+), 28 deletions(-) diff --git a/apps/android/app/src/main/AndroidManifest.xml b/apps/android/app/src/main/AndroidManifest.xml index 68ee6d2..3f1c726 100644 --- a/apps/android/app/src/main/AndroidManifest.xml +++ b/apps/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,11 @@ + + + + + UIApplicationSupportsIndirectInputEvents + NSCameraUsageDescription + 需要使用相机来拍摄照片 + NSPhotoLibraryUsageDescription + 需要访问相册来选择照片 diff --git a/apps/lib/features/calendar/ui/screens/calendar_dayweek_screen.dart b/apps/lib/features/calendar/ui/screens/calendar_dayweek_screen.dart index 9fd4106..f835a2e 100644 --- a/apps/lib/features/calendar/ui/screens/calendar_dayweek_screen.dart +++ b/apps/lib/features/calendar/ui/screens/calendar_dayweek_screen.dart @@ -44,7 +44,6 @@ class _CalendarDayWeekScreenState extends State final ScrollController _dayStripController = ScrollController(); Key _eventsKey = UniqueKey(); List _events = const []; - String? _lastRoute; @override void initState() { @@ -62,20 +61,17 @@ class _CalendarDayWeekScreenState extends State WidgetsBinding.instance.addPostFrameCallback((_) { _scrollToSelectedDate(); - _lastRoute = GoRouterState.of(context).uri.toString(); + _setupRouteListener(); }); } - @override - void didChangeDependencies() { - super.didChangeDependencies(); - final currentRoute = GoRouterState.of(context).uri.toString(); - if (_lastRoute != null && _lastRoute != currentRoute) { - if (!currentRoute.contains('/events/')) { - _loadEvents(); - } - } - _lastRoute = currentRoute; + void _setupRouteListener() { + final router = GoRouter.of(context); + router.routerDelegate.addListener(_onRouteChange); + } + + void _onRouteChange() { + _loadEvents(); } void _updateMonthDates() { @@ -94,6 +90,9 @@ class _CalendarDayWeekScreenState extends State @override void dispose() { + try { + GoRouter.of(context).routerDelegate.removeListener(_onRouteChange); + } catch (_) {} WidgetsBinding.instance.removeObserver(this); _dayStripController.dispose(); super.dispose(); diff --git a/apps/lib/features/calendar/ui/screens/calendar_month_screen.dart b/apps/lib/features/calendar/ui/screens/calendar_month_screen.dart index 9641af3..1fb74e2 100644 --- a/apps/lib/features/calendar/ui/screens/calendar_month_screen.dart +++ b/apps/lib/features/calendar/ui/screens/calendar_month_screen.dart @@ -27,7 +27,6 @@ class _CalendarMonthScreenState extends State late DateTime _selectedDate; Key _eventsKey = UniqueKey(); final Map> _eventsByDay = {}; - String? _lastRoute; @override void initState() { @@ -45,20 +44,17 @@ class _CalendarMonthScreenState extends State _loadMonthEvents(); WidgetsBinding.instance.addPostFrameCallback((_) { - _lastRoute = GoRouterState.of(context).uri.toString(); + _setupRouteListener(); }); } - @override - void didChangeDependencies() { - super.didChangeDependencies(); - final currentRoute = GoRouterState.of(context).uri.toString(); - if (_lastRoute != null && _lastRoute != currentRoute) { - if (!currentRoute.contains('/events/')) { - _loadMonthEvents(); - } - } - _lastRoute = currentRoute; + void _setupRouteListener() { + final router = GoRouter.of(context); + router.routerDelegate.addListener(_onRouteChange); + } + + void _onRouteChange() { + _loadMonthEvents(); } Future _loadMonthEvents() async { @@ -85,6 +81,9 @@ class _CalendarMonthScreenState extends State @override void dispose() { + try { + GoRouter.of(context).routerDelegate.removeListener(_onRouteChange); + } catch (_) {} WidgetsBinding.instance.removeObserver(this); super.dispose(); } diff --git a/apps/lib/features/calendar/ui/widgets/create_event_sheet.dart b/apps/lib/features/calendar/ui/widgets/create_event_sheet.dart index d67ff1b..ff72154 100644 --- a/apps/lib/features/calendar/ui/widgets/create_event_sheet.dart +++ b/apps/lib/features/calendar/ui/widgets/create_event_sheet.dart @@ -113,8 +113,13 @@ class _CreateEventSheetState extends State } DateTime _roundToNearestMinute(DateTime dt, int interval) { - final minute = (dt.minute / interval).round() * interval; - return DateTime(dt.year, dt.month, dt.day, dt.hour, minute % 60); + final totalMinutes = dt.hour * 60 + dt.minute; + final rounded = ((totalMinutes / interval).round() * interval); + final hours = rounded ~/ 60; + final minutes = rounded % 60; + final dayOffset = hours >= 24 ? 1 : 0; + final newHour = hours % 24; + return DateTime(dt.year, dt.month, dt.day + dayOffset, newHour, minutes); } @override @@ -242,8 +247,27 @@ class _CreateEventSheetState extends State _endTime ?? _startTime, (date, time) { setState(() { - _endDate = date; - _endTime = time; + final startDateTime = DateTime( + _startDate.year, + _startDate.month, + _startDate.day, + _startTime.hour, + _startTime.minute, + ); + final endDateTime = DateTime( + date.year, + date.month, + date.day, + time.hour, + time.minute, + ); + if (endDateTime.isBefore(startDateTime)) { + _endDate = _startDate; + _endTime = _startTime; + } else { + _endDate = date; + _endTime = time; + } }); }, isOptional: true,