flutter_webview 部分手机截屏导致屏幕卡死

1,630 阅读2分钟

前言:

flutter系统级别的bug,三根手指滑动屏幕(部分手机截屏操作就是三根手指滑动),屏幕会卡死。

系统:

电脑: macOS 10.15.7

Flutter 2.0.6 • channel stable • github.com/flutter/flu…

Framework • revision 1d9032c7e1 (8 months ago) • 2021-04-29 17:37:58 -0700

Engine • revision 05e680e202

Tools • Dart 2.12.

手机:安卓手机

问题描述:

用户反馈截屏分享出去,然后返回项目,导致页面任何区域都不能点击或滑动(冻屏了)

定位分析: 发现不是分享就是截屏就会出现该问题,进一步定位 发现 只要三个手指滑动就会出现该问题(因为很多安卓手机的截屏快捷键就是 三个手指滑动,同理如果用物理键去截图没有该问题产生)

吐槽一下: 定位问题开始就走偏了,因为的项目我进行了flutter的升级 升级前 1.22.6版本,升级之后是2.0.6版本,建议如果不是一定要去升级的话,强烈建议不要升级,因为后面不管是window和Mac 要折腾好久。

webview_flutter是web view容器的插件的,项目一开始就是把该插件下载下来了,用本地的插件,开始定位的时候以为是该插件版本低的原因,我直接用线上当前最新版2.0.8,正好这个版本也是支持空安全的,发现不行……

image.png

随后找到相关的文章参考:

blog.csdn.net/whs86771223…

image.png

着又退回用本地的webView_flutter,改动

GestureDetector 以为要改动的地方就是

image.png

发现还是不行……

解决方案:

再找资料,某篇博客上讲了

github.com/flutter/flu…

进一步进去看

github.com/flutter/flu…

image.png

说明一下: 这个文件是包的文件,window和Mac路径不完全一样,其实只要在 Android studio 上调试一下

image.png

相关代码拷贝粘贴到flutter的packages里面

/// These arrays must have same length, otherwise below constructor 'AndroidMotionEvent' will throw exception.

if (pointers.length != pointerProperties.length ||

pointers.length != pointerPositions.length) {

    return null;

}

window的路径 参考

image.png

重新调试运行,完美,问题解决!

结语

创作不易,请多点赞+关注,谢谢! 有问题留言,我都会及时回复。