App侧滑卡死?Flutter表示这锅不能背
前言
由于谷歌 flutter 团队裁员,导致维护更新满足不了需求,传闻 flutter 团队不足50人,很多跨端的支持以及现有的问题都无法解决,flutter 社区foundation不满足于现有的开发进度,fock flutter维护分支Flock, 貌似不少公司组织已经在这样做了,很多问题也不能怪flutter, 比如最近发的这个问题。
问题
flutter freeze卡死的问题相信很多开发者都遇到过, 最近遇到iOS侧滑返回的导致freeze的问题,很早就发现这个问题,当时的解决方案是在首页禁止侧滑,就是导航栈只有一个页面的时禁用手势
if (self.navigationController.viewControllers.count == 1) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
此方案可以将卡死问题很大概率的降低,但是仍然会出现卡死, 可以规避但没找到根本原因
分析
最开始以为是flutter手势和iOS 系统返回手势冲突导致,app 存在一些侧滑的轮播图,经过对比发现有没有轮播图或者flutter 手势都会出现卡死。
问题可能出现在iOS 原生侧,经过尝试发现问题所在,复现代码如下
首页实现手势比如PanGuesture
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:**self** action: **@selector**(handlePan:)];
[redView addGestureRecognizer:panGesture];
push 跳转到二级页面,二级页面对重置了导航栏的返回手势的delegate
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
原因:
重置了导航栏的PopGestureRecognizer的delegate,向当前全局的侧滑返回代理回调失效,导致策划返回出现问题,禁用手势不可以讲导航栏的返回手势的delete 置为nil
Flutter为何侧滑可出现卡死,通过分析flutter的源码就很容易知道原因
结论
flutterViewController也实现了手势操作,所以使用依赖原生的flutter出现了这个问题,跳转到其他页面,将PopGestureRecognizer 置为nil, 就出现这个问题
Flutter:这真不是我的锅
感想
从20年开始接触Flutter 也有三四年时间了,Flutter的应用范围也越来越广,但是大厂对flutter的接受度还是不高,要不要继续坚持搞Flutter,作为开发未来将何去何从
来源:juejin.cn/post/7433827139113746467