flutter_thrio icon indicating copy to clipboard operation
flutter_thrio copied to clipboard

iOS 原生和flutter 页面多级跳转后,在栈顶的Flutter页面侧滑时,会导致栈内的Flutter页面卡死,点击无响应

Open ZhangsBye opened this issue 3 years ago • 32 comments

在最后Flutter页面侧滑后,返回上一个原生页面,再侧滑返回Flutter页面,查看在栈顶的Flutter页面侧滑时,并未执行Dispose函数。(如果栈内还有其他Flutter页面时,不会执行Dispose)

ZhangsBye avatar Aug 02 '22 09:08 ZhangsBye

点击导航栏的返回按钮则会及时Dispose,不存在此问题。只有侧滑时会有这个问题。请教下,要如何解决呢?

ZhangsBye avatar Aug 02 '22 09:08 ZhangsBye

  1. 先看看 thrio 的 example 能复现嘛?
  2. 如果 thrio 的example 不能复现,能否提供个可复现的 demo?

foxsofter avatar Aug 03 '22 05:08 foxsofter

直接运行Example能够复现;

ZhangsBye avatar Aug 03 '22 05:08 ZhangsBye

1: 这个问题对我们项目影响还比较大,所以我特地下载了Up主的 Example 调试,发现侧滑也未走dispose 2: 另外发现的是:点击右上角的返回是先pop后走的 NavigationVc的Delegate函数 didShow;但是侧滑时是先走的didShow,然后走的Pop,不知道这个是否有影响呢?

ZhangsBye avatar Aug 03 '22 05:08 ZhangsBye

我是运行调试的Example 发现侧滑未走dispose;

ZhangsBye avatar Aug 03 '22 05:08 ZhangsBye

走不走 dispose 先不说,页面栈卡死有没有?

foxsofter avatar Aug 03 '22 06:08 foxsofter

页面栈没有卡死

ZhangsBye avatar Aug 03 '22 07:08 ZhangsBye

那这个问题,影响是啥?

foxsofter avatar Aug 03 '22 07:08 foxsofter

抱歉以上可能描述的不太清晰;

ZhangsBye avatar Aug 03 '22 07:08 ZhangsBye

我们也遇到了这个问题,所以也特地下载了example去测试,发下example也有同样的问题,详细描述下: 从原生页面A push 进入到flutter页面flutter1,然后从flutter1再push进入原生页面B,此时从原生B点击某个按钮push进入flutter页面flutter2,然后从flutter2页面手势侧滑返回页面B,flutter2不走dispose,最后从页面B再侧滑返回flutter1时,flutter1会先显示flutter2的页面(因为flutter2没有dispose),导致flutter1显示异常 如果点击左上角返回按钮是ok的,这个对用户体验还是比较大的,麻烦作者验证一下

aimei111 avatar Aug 03 '22 07:08 aimei111

查看example的flutter2侧滑,返回flutter1页面时,页面会闪动下正常显示flutter1页面,应该是作者做了处理,但查看生命周期,侧滑未执行dispose,导致flutter2页面未销毁或者延迟销毁。 在项目中我连续跳转两个flutter1和2页面,在第二个flutter2页面栈顶使用侧滑返回和点击导航按钮的返回,侧滑会导致栈内上一个flutter1页面不能正常显示,调试查看生命周期过程,发现侧滑Flutter2后并未执行 dispose,但点击Flutter2页面的返回按钮正常执行dispose。

ZhangsBye avatar Aug 03 '22 07:08 ZhangsBye

https://user-images.githubusercontent.com/19581975/182551780-2fcdbc4c-acb7-419a-be76-813389c9507c.mov

上传了一个视频,可以看下(显示第一个flutter页面的时候先闪动的显示了一下第二个flutter页面的UI)

aimei111 avatar Aug 03 '22 07:08 aimei111

这个情况是处理过的,不过后面的版本啥可能又出问题了吧,最近会看看

foxsofter avatar Aug 03 '22 07:08 foxsofter

能说一下哪个版本是好的不,我们去下载旧版本也是可以的,因为比较影响用户体验,我们会比较着急,感谢~~

aimei111 avatar Aug 03 '22 07:08 aimei111

可能是 1.x

foxsofter avatar Aug 03 '22 07:08 foxsofter

Example 里面好像就是1.4.x,能帮忙确定下具体版本号不~

aimei111 avatar Aug 03 '22 07:08 aimei111

这个对应的是 Flutter 1.x ,估计不是你想要的

foxsofter avatar Aug 03 '22 07:08 foxsofter

那辛苦能尽快修复下不,我们比较着急😢

aimei111 avatar Aug 03 '22 07:08 aimei111

我只能尽量的快了,下周一之前应该会解决

foxsofter avatar Aug 03 '22 08:08 foxsofter

这个就是闪了一下,不注意可能也看不到

foxsofter avatar Aug 03 '22 08:08 foxsofter

感谢,尽快修复就行,因为我们项目跟example的表现还有点区别,我们项目不是闪一下,而是会把第二个flutter页面的ui一直覆盖在第一个flutter页面上,除非侧滑一下第一个flutter页面才会消失…

aimei111 avatar Aug 03 '22 08:08 aimei111

所以你应该看下你项目上,其他的路由生命周期走了没有。。。dispose 晚走应该不是这个现象

foxsofter avatar Aug 03 '22 08:08 foxsofter

应该就是跟dispose不走有关,因为点击左上角返回按钮都是好的,侧滑就有问题。 我测试了项目内的所有flutter页面都会有这个问题,全部都是侧滑有问题,点击左上角返回按钮没问题

aimei111 avatar Aug 03 '22 08:08 aimei111

可能吧,不过 example 就只是闪一下,如果能更快先解决你的问题,你可以对比啥区别在哪里

foxsofter avatar Aug 03 '22 08:08 foxsofter

我们可以先查一下区别在哪,不过就算example的效果我们也上线不了,这个我们产品验收比较严,这个体验通过不了😭

aimei111 avatar Aug 03 '22 08:08 aimei111

刚才试了一下1.x的几个版本,都有这个问题..

aimei111 avatar Aug 03 '22 09:08 aimei111

我在 Flutter 3.0.5 上不能复现这个问题,你们啥版本呢?

foxsofter avatar Aug 04 '22 08:08 foxsofter

image 我的是2.13.0-0.4.pre,我复现这个问题不是运行的flutter项目,是直接通过xcode运行的Runner

aimei111 avatar Aug 04 '22 08:08 aimei111

方便的话,QQ群聊

foxsofter avatar Aug 04 '22 08:08 foxsofter

无法解决,目前的现象是 dispose 在 Flutter 页面出现的时候,会最终被调用,不影响使用。

foxsofter avatar Aug 04 '22 12:08 foxsofter