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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章