fix: iPad modal auto-dismiss on iPadOS 26.1+
close #224, credits to @Jon-Salmon for the workaround: https://github.com/flutter/flutter/issues/175606#issuecomment-3453392532
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'dart:io' show Platform;
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
@@ -39,8 +40,26 @@ import 'utils/language_codes.dart';
|
||||
import 'i18n/strings.g.dart';
|
||||
import 'focus/input_mode_tracker.dart';
|
||||
|
||||
// Workaround for Flutter bug #177992: iPadOS 26.1+ misinterprets fake touch events
|
||||
// at (0,0) as barrier taps, causing modals to dismiss immediately.
|
||||
// Remove when Flutter PR #179643 is merged.
|
||||
bool _zeroOffsetPointerGuardInstalled = false;
|
||||
|
||||
void _installZeroOffsetPointerGuard() {
|
||||
if (_zeroOffsetPointerGuardInstalled) return;
|
||||
GestureBinding.instance.pointerRouter.addGlobalRoute(_absorbZeroOffsetPointerEvent);
|
||||
_zeroOffsetPointerGuardInstalled = true;
|
||||
}
|
||||
|
||||
void _absorbZeroOffsetPointerEvent(PointerEvent event) {
|
||||
if (event.position == Offset.zero) {
|
||||
GestureBinding.instance.cancelPointer(event.pointer);
|
||||
}
|
||||
}
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
_installZeroOffsetPointerGuard(); // Workaround for iPadOS 26.1+ modal dismissal bug
|
||||
|
||||
// Initialize settings first to get saved locale
|
||||
final settings = await SettingsService.getInstance();
|
||||
|
||||
Reference in New Issue
Block a user