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

Hello man,写惯了android的生命周期的你们转到Flutter,生命周期这个过程完全变了样,有时候想要在特定的时侯执行代码,却找不到下手的地方,是不是特别苦恼!!哈哈!今天我们就来看下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();
    });
  });
}

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

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

我们组织的QQ群:892398530

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

Flutter中,使用高德地图绘制轨迹需要以下几个步骤: 第一步,需要在pubspec.yaml文件中添加高德地图插件依赖。可以在Flutter官方插件网站找到相关的插件信息,并将其添加到pubspec.yaml中。 第二步,创建一个地图页面并引入相关的库文件。在Flutter中,可以使用‘import’语句导入所需的库文件。然后,创建一个StatefulWidget类,并在build方法中返回一个Scaffold组件作为页面的根组件。 第三步,获取定位数据。使用Flutter的定位插件获取当前设备的位置信息。可以在页面初始化时通过初始化插件,并获取位置信息。然后,将位置信息传递给地图组件。 第四步,将地图放置在页面上。可以使用高德地图插件提供的MapView组件将地图添加到页面中。同时,配置相关的地图参数,如地图的缩放级别、中心点等。 第五步,绘制轨迹。将获取到的位置信息按时间顺序记录下来,并在地图上根据位置数据绘制轨迹。可以使用高德地图插件提供的Polyline组件进行轨迹的绘制。 第六步,更新轨迹。随着设备位置的变化,需要实时更新轨迹。可以通过监听定位插件的位置变化事件,获取到最新的位置信息,并更新轨迹。 最后,注意进行相关的错误处理和资源释放工作。在使用过程中,需要注意处理异常情况,如设备不支持定位等。同时,在不需要使用地图时,需要释放相关的资源,以免造成资源浪费。 综上所述,使用Flutter绘制高德地图的轨迹需要引入相关的插件依赖,获取设备的位置信息,将地图添加到页面上并配置相关参数,根据位置数据绘制轨迹,并实时更新轨迹。同时还需处理异常情况和释放资源。这样就可以实现在Flutter绘制高德地图轨迹的功能了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baoolong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值