chenenyu / lifecycle

Lifecycle support for Flutter widgets.
https://pub.dev/packages/lifecycle
Apache License 2.0
50 stars 6 forks source link

tabbarView切换时子页面无法接收到onLifecycleEvent事件 #6

Closed JDongKhan closed 3 years ago

JDongKhan commented 3 years ago

您好,目前项目只支持ChildPageLifecycleWrapper的onLifecycleEvent接收切换事件,而实际的业务中,tabbar的子页面层级可能很深,所以希望tabbarView子页面的onLifecycleEvent也能接收的tabbar切换的事件,

看源码ChildPageLifecycleWrapper0.3版本好像去除了分发的操作。

我的demo:https://github.com/JDongKhan/flutter_demo demo中:有TabbarViewFirstPage、TabbarViewSecondPage两个页面,tab切换时,TabbarViewFirstPage和其子页面Player都无法接收到事件

chenenyu commented 3 years ago

tabbar的子页面层级可能很深,所以希望tabbarView子页面的onLifecycleEvent也能接收的tabbar切换的事件

任何一个tabbar的子页面想要收到切换事件,都可以用ChildPageLifecycleWrapper把它包裹起来,对于你的demo来说,可以把ChildPageLifecycleWrapper放在这里Container,包裹起来试下

chenenyu commented 3 years ago

目前同一个index只允许注册一个子页面接收切换事件,下一个小版本会支持任意多个子页面注册监听

JDongKhan commented 3 years ago

tabbar的子页面层级可能很深,所以希望tabbarView子页面的onLifecycleEvent也能接收的tabbar切换的事件

任何一个tabbar的子页面想要收到切换事件,都可以用ChildPageLifecycleWrapper把它包裹起来,对于你的demo来说,可以把ChildPageLifecycleWrapper放在这里Container,包裹起来试下

这只是一个demo,实际中可能player上面还有好几层,最好的场景直接在player里面处理切换逻辑。 不管在哪加ChildPageLifecycleWrapper都需要从外面传一个index吧或者通过context自己查找。

JDongKhan commented 3 years ago

目前同一个index只允许注册一个子页面接收切换事件,下一个小版本会支持任意多个子页面注册监听

最好的方式就是这样,子页面下的随便一个widget都能接受到onLifecycleEvent。

JDongKhan commented 3 years ago

目前还有一个问题,demo中也复现了。

现在有两个页面,第一个页面是处理播放器相关的。当切换到第二个页面跳转时,会发现第一个播放器相关的页面都会收到onLifecycleEvent,这样返回就会漏音。

chenenyu commented 3 years ago

https://github.com/JDongKhan/flutter_demo/blob/41b050ab63d9b896c97fda90278035e5c7efdc93/flutter_app_1/lib/tabbarview/tabbar_view_first_page.dart#L14 把这块with的都删掉

JDongKhan commented 3 years ago

@chenenyu 不好意思,没懂什么目的。

first_page这几个都不能删,因为它是一个播放页面,它也是可以跳转到其他页面的,只是demo里面没有写,如果从firstpage跳转到下一个页面,需要把播放器暂停掉,返回再恢复播放。

chenenyu commented 3 years ago

with LifecycleAware, LifecycleMixin 这种用法是给非TableView/PageView场景下的普通页面使用的,不能和ChildPageLifecycleWrapper这种Widget一起使用。

chenenyu commented 3 years ago

可以先看下项目自带的demo,里面有tabview的使用场景,tabview嵌套pageview的也有

JDongKhan commented 3 years ago

如果不在firstpage和player处理,就需要在顶层的TabbarViewDemoPage去with LifecycleAware, LifecycleMixin ,这样在N多个类里面交互就会很不方便,您的demo都是在一个类文件相对简单些,而我看设计上是可以在任意widget上去with LifecycleAware, LifecycleMixin的,只是tabbarView切换后会发生一些漏掉的场景问题。

chenenyu commented 3 years ago

方便的话可以加个联系方式沟通

JDongKhan commented 3 years ago

wx:myheartforapple