在以前项目中,onPageShow和onPageHide由开源框架flutter_boost提供,在此次项目中,创新性的采用了fusion框架,fusion框架同样提供了类似的方法,但在实践中发现,当flutter页面相互replace或者多次pop页面后,onPageShow不会调用,这就导致了诸多bug,于是,需要探索如何了解一个widget/page是否可见。
首先试验了flutter官方提供的WidgetBindingsObserver,发现其AppLifecycleState有四种状态:
- resumed 接受用户响应并在前台
- inactive 不能接受用户响应,失去焦点
- paused 不可见,运行在后台
- detached 应用程序仍然由 Flutter 引擎托管,但已从任何宿主视图中分离
经过测试发现,在用户回到桌面或者锁屏,可以监听到paused事件,但是push到新的flutter页面,或者从其他flutter页面pop到本页面,没有生命周期变化,因此,此方案不可行。文章来源:https://www.toymoban.com/news/detail-659140.html
观察发现,flutter的动画,在应用退到后台/push到其他页面等情况,动画时间仍在流逝,但动画绘制会停止(节约性能),这就代表着,flutter引擎是能知道某个widget是否可见的,在flutter中使用动画,通常需要使用with关键字混入SingleTickerProviderStateMixin,那么看来答案,就在此类中了。
查看源码:
文章来源地址https://www.toymoban.com/news/detail-659140.html
到了这里,关于Flutter如何知道页面/组件可见?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!