diff --git a/lib/app/util/pointer_event_filter.dart b/lib/app/util/pointer_event_filter.dart new file mode 100644 index 0000000..f300344 --- /dev/null +++ b/lib/app/util/pointer_event_filter.dart @@ -0,0 +1,25 @@ +import 'package:flutter/gestures.dart'; + +/// iPadOS 26.1+ 버그 임시 해결책 +/// https://github.com/flutter/flutter/issues/175606 +/// https://github.com/flutter/flutter/issues/177992 +/// +/// 상태바 터치 시 (0, 0) 좌표에 가짜 터치 이벤트가 발생하여 +/// Popup, Drawer 등이 자동으로 닫히는 문제를 해결합니다. +class PointerEventFilter { + static bool _installed = false; + + /// 앱 시작 시 호출하여 (0, 0) 좌표 터치 이벤트를 필터링합니다. + /// WidgetsFlutterBinding.ensureInitialized() 이후에 호출해야 합니다. + static void install() { + if (_installed) return; + GestureBinding.instance.pointerRouter.addGlobalRoute(_filterZeroOffsetEvent); + _installed = true; + } + + static void _filterZeroOffsetEvent(PointerEvent event) { + if (event.position == Offset.zero) { + GestureBinding.instance.cancelPointer(event.pointer); + } + } +} diff --git a/lib/presentation/app.dart b/lib/presentation/app.dart index 8d9af5c..aa1366f 100644 --- a/lib/presentation/app.dart +++ b/lib/presentation/app.dart @@ -8,6 +8,7 @@ import 'package:grimity/app/environment/flavor.dart'; import 'package:grimity/app/linking/initialize_app_provider.dart'; import 'package:grimity/app/linking/pending_deep_link_provider.dart'; import 'package:grimity/app/static/push_notification.dart'; +import 'package:grimity/app/util/pointer_event_filter.dart'; import 'package:grimity/presentation/common/provider/user_auth_provider.dart'; import 'package:talker_flutter/talker_flutter.dart'; import 'package:talker_riverpod_logger/talker_riverpod_logger.dart'; @@ -16,6 +17,9 @@ import 'package:flutter_localizations/flutter_localizations.dart'; void runFlavoredApp() async { await Flavor.instance.setup(); + // iPadOS 26.1+ 가짜 터치 이벤트 필터링 + PointerEventFilter.install(); + // Initialize talker final talker = TalkerFlutter.init();