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

Posted 一叶飘舟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter获取Build完成状态监听 及每一帧绘制完成的监听相关的知识,希望对你有一定的参考价值。

Flutter 在 Build完成后的监听和每一帧绘制完成后的监听

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

官方是这么描述它的

The glue between the widgets layer and the Flutter engine.


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

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


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

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

@override
  void initState() 
    super.initState();
    widgetsBinding=WidgetsBinding.instance;
    widgetsBinding.addPostFrameCallback((callback)
      print("addPostFrameCallback be invoke");
    );
  

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

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

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

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

@override
void initState() 
  super.initState();
  widgetsBinding=WidgetsBinding.instance;
  widgetsBinding.addPostFrameCallback((callback)
    widgetsBinding.addPersistentFrameCallback((callback)
      print("addPersistentFrameCallback be invoke");
      //触发一帧的绘制
      widgetsBinding.scheduleFrame();
    );
  );

以上是关于Flutter获取Build完成状态监听 及每一帧绘制完成的监听的主要内容,如果未能解决你的问题,请参考以下文章

CSS3帧动画

Libgdx之监听用户输入

在 Android 屏幕录制中 - 如何获取每一帧?

Java 排序及每一步过程

android获取surfaceview里面的每一帧

获取视频中每一帧的时间戳