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