flutter-thrio / flutter_thrio

flutter_thrio makes it easy and fast to add flutter to existing mobile applications, and provide a simple and consistent navigator APIs.
MIT License
363 stars 49 forks source link

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

Closed ZhangsBye closed 1 year ago

ZhangsBye commented 2 years ago

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

ZhangsBye commented 2 years ago

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

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

直接运行Example能够复现;

ZhangsBye commented 2 years ago

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

ZhangsBye commented 2 years ago

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

foxsofter commented 2 years ago

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

ZhangsBye commented 2 years ago

页面栈没有卡死

foxsofter commented 2 years ago

那这个问题,影响是啥?

ZhangsBye commented 2 years ago

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

aimei111 commented 2 years ago

我们也遇到了这个问题,所以也特地下载了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的,这个对用户体验还是比较大的,麻烦作者验证一下

ZhangsBye commented 2 years ago

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

aimei111 commented 2 years ago

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

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

foxsofter commented 2 years ago

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

aimei111 commented 2 years ago

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

foxsofter commented 2 years ago

可能是 1.x

aimei111 commented 2 years ago

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

foxsofter commented 2 years ago

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

aimei111 commented 2 years ago

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

foxsofter commented 2 years ago

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

foxsofter commented 2 years ago

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

aimei111 commented 2 years ago

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

foxsofter commented 2 years ago

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

aimei111 commented 2 years ago

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

foxsofter commented 2 years ago

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

aimei111 commented 2 years ago

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

aimei111 commented 2 years ago

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

foxsofter commented 2 years ago

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

aimei111 commented 2 years ago

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

foxsofter commented 2 years ago

方便的话,QQ群聊

foxsofter commented 2 years ago

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

foxsofter commented 2 years ago

你可以试试 feature/flutter3 这个分支,不过 api 会有一些调整,虽然也没有走 dispose,但这种情况下会销毁引擎,应该不会出现页面闪一下的情况了

aimei111 commented 2 years ago

好的