当前位置:   article > 正文

Flutter获取Build完成状态监听 及每一帧绘制完成的监听_flutter build 回调

flutter build 回调

Hello man,写惯了android的生命周期的你们转到Flutter,生命周期这个过程完全变了样,有时候想要在特定的时侯执行代码,却找不到下手的地方,是不是特别苦恼!!哈哈!今天我们就来看下Flutter 在 Build完成后的监听和每一帧绘制完成后的监听

这个是我们监听要用的重要的类------->WidgetsBinding

官方是这么描述它的

The glue between the widgets layer and the Flutter engine.

中文的意思是 控件层和Flutter引擎之间的粘合剂。就是这个类 它能监听到第一帧绘制完成,第一帧绘制完成标志着已经Build完成,并交由引擎绘制结束;我们看下是哪个方法肩负此重任

  1. //Schedule a callback for the end of this frame
  2. addPostFrameCallback(FrameCallback callback) → void

这个方法的意思是此帧结束时的回调,应该不局限于开始的第一帧(触发待研究),如果我们在initState里面加入此监听,那就美妙了,等Build结束,你的回调就会执行

想想应该和 Android 的 onResume 效果差不多哈,下面是我写的例子

  1. @override
  2. void initState() {
  3. super.initState();
  4. widgetsBinding=WidgetsBinding.instance;
  5. widgetsBinding.addPostFrameCallback((callback){
  6. print("addPostFrameCallback be invoke");
  7. });
  8. }

 

2 . 监听每一帧结束

这个监听感觉都能做游戏了,充分利用CPU绘制来达到高帧率,举个栗子,我在画泡泡上升的动画,我可以用Timer来画,但是我手机性能好的话,一帧结束了。还有等待一段时间才绘制下一帧;手机性能差的话,我前一帧都没画完呢,你就开始下一帧了,这不是要卡死的节奏吗?  

好了,看下怎么监听的!类还是那个类---->WidgetsBinding,方法却不再是那个方法了,我们来认识下他

  1. //Adds a persistent frame callback
  2. //持久帧的回调
  3. addPersistentFrameCallback(FrameCallback callback) → void

还是InitState,我们初始化的时候,加上这个监听那就无敌了,看下例子

  1. @override
  2. void initState() {
  3. super.initState();
  4. widgetsBinding=WidgetsBinding.instance;
  5. widgetsBinding.addPostFrameCallback((callback){
  6. widgetsBinding.addPersistentFrameCallback((callback){
  7. print("addPersistentFrameCallback be invoke");
  8. //触发一帧的绘制
  9. widgetsBinding.scheduleFrame();
  10. });
  11. });
  12. }

是不是很简单,是不是解决了Build完成的监听,是不是离高性能游戏又迈进了一步,贴一张我写的例子

项目的gIthub:https://github.com/OpenFlutter/PullToRefresh    目录/lib/ui/secondpage/bubbles.dart

我们组织的QQ群:892398530

我们组织的Github:https://github.com/OpenFlutter

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/383194
推荐阅读
相关标签
  

闽ICP备14008679号