注册

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的源码就很容易知道原因


image.png


结论

flutterViewController也实现了手势操作,所以使用依赖原生的flutter出现了这个问题,跳转到其他页面,将PopGestureRecognizer 置为nil, 就出现这个问题


Flutter:这真不是我的锅


感想

从20年开始接触Flutter 也有三四年时间了,Flutter的应用范围也越来越广,但是大厂对flutter的接受度还是不高,要不要继续坚持搞Flutter,作为开发未来将何去何从


作者:普罗哈基米
来源:juejin.cn/post/7433827139113746467

0 个评论

要回复文章请先登录注册