再次紧急修复,Flutter 针对 WebView 无法点击问题增加新的快速修复

前几天我们刚聊了 《Flutter 官方正式解决 WebView 在 iOS 26 上有点击问题》 ,这是一个完整的底层重构修复,整个修复周期审核堪比"博士论文",但是也带来了一个问题,它只修复了 Engine 和 Framework 层面问题,那插件端还需要等升级适配修复,这链路就又再一次拉长了

所以针对这个场景,作者又提交了一个"骚操作 "的快速修复,#179908这个 PR 的修复方案非常"暴力"但也有效:找到那些特定的手势识别器,先禁用它们,然后立即重新启用, 这相当于重置了识别器的状态。

是不是又有熟悉的味道?不理解的可以看上上篇讲这个点击问题的内容。

为什么需要这个新的 PR ?因为这是一个无需任何插件更新的快速修复方案,并且也已经合并到了 master :

这个 PR 具体的代码修改就是:在 FlutterTouchInterceptingView 中添加了两个核心的辅助方法,并在 blockGesture 中调用:

  • searchAndFixWebView : 一个递归函数,它会遍历视图层级,如果遇到的视图是 WKWebView 类型,它就会调用修复手势的方法,执行 searchAndFixWebViewGestureRecognzier ,确保即使 WKWebView 被嵌套在其他 UIView 中也能被找到

  • searchAndFixWebViewGestureRecognzier : 也是一个递归函数,遍历当前视图的所有 gestureRecognizers ,检查识别器是否启用,并且类名是否用 "TouchEventsGestureRecognizer" 结尾 (通常对应 WKTouchEventsGestureRecognizer) ,然后执行 recognizer.enabled 的关闭和打开操作:

  • 修改了 blockGesture , 当手势拦截策略为 FlutterPlatformViewGestureRecognizersBlockingPolicyEager时,在 iOS 26 改为直接调用 [self searchAndFixWebView:self.embeddedView]; 来执行上述修复逻辑:

最后,方案还增加了一个 FLTDisableWebViewGestureReset ,给开发者添加了一个安全阀,通过读取 Info.plist 中的 FLTDisableWebViewGestureReset ,如果这个修复方案上线后出现严重问题,开发者可以通过配置这个 flag 来禁用这个"重置手势"的逻辑。

可以看到,这是一个快速且粗暴的改动,就是在 FlutterPlatformViews.mm 中实现了针对 WKWebView 手势识别器的递归搜索和"重启"机制,并在 blockGesture 中针对 iOS 26+ 启用了这个机制

但是好处也很明显,可以什么插件都不改就生效,当然主要是一个临时修复,为的是方便开发者快速解决问题,真正 fix 的途径还是推荐走之前的 hitTest :

参考链接

github.com/flutter/flu...

相关推荐
Running_slave2 小时前
聊聊TCP滑窗的一些有趣“病症”
前端·网络协议·tcp/ip
1024肥宅2 小时前
浏览器存储 API:全面解析与高级实践
前端·数据库·浏览器
HIT_Weston2 小时前
63、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(七)
前端·ubuntu·gitlab
jinxinyuuuus2 小时前
vsGPU:硬件参数的数据仓库设计、ETL流程与前端OLAP分析
前端·数据仓库·etl
李慕婉学姐2 小时前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
小信丶2 小时前
解决 pnpm dev 报错:系统禁止运行脚本的问题
前端·vue.js·windows·npm
૮・ﻌ・3 小时前
Vue3:组合式API、Vue3.3新特性、Pinia
前端·javascript·vue3
前端不太难3 小时前
RN + TypeScript 项目越写越乱?如何规范架构?
前端·javascript·typescript
神算大模型APi--天枢6463 小时前
全栈自主可控:国产算力平台重塑大模型后端开发与部署生态
大数据·前端·人工智能·架构·硬件架构