flutter 生命週期

2021-09-24 08:10:48 字數 2577 閱讀 8691

通過build()渲染

state初始化時會依次執行 : 建構函式 > initstate > didchangedependencies > widget build , 此時頁面載入完成。

呼叫次數:1次

這個函式嚴格意義上來講不屬於生命週期的一部分,因為這個時候state的widget屬性為空,無法在建構函式中訪問widget的屬性 。但是建構函式必然是要第乙個呼叫的。可以在這一部分接收前乙個頁面傳遞過來的資料。

呼叫次數:1次

當插入渲染樹的時候呼叫,這個函式在生命週期中只呼叫一次。這裡可以做一些初始化工作,比如初始化state的變數。

在這個方法中,上下文context可用,但你還不能真正使用它,因為框架還沒有完全將狀態與它相關聯

initstate()方法完成後,state物件現在已初始化,上下文可用。

這個函式會緊跟在initstate之後呼叫,並且可以呼叫buildcontext.inheritfromwidgetofexacttype, 也就說在didchangedependencies中,可以跨元件拿到資料

在此階段,由於上下文context可用,您可以使用它。

呼叫次數:多次

初始化之後開始繪製介面,當setstate觸發的時候會再次被呼叫

這個函式一般用於比較新、老widget,看看哪些屬性改變了,並對state做一些調整。

需要注意的是,涉及到controller的變更,需要在這個函式中移除老的controller的監聽,並建立新controller的監聽。

元件移除,例如頁面銷毀的時候會依次執行:deactivate > dispose

在dispose之前,會呼叫這個函式。實測在元件課件狀態變化的時候會呼叫,當元件解除安裝時也會先一步dispose呼叫。

呼叫次數:1次

一旦到這個階段,元件就要被銷毀了,這個函式一般會移除監聽,清理環境。

state鏈結到乙個buildcontext,buildcontext鏈結到widget的乙個例項

widget state類訪問其任何變數

print(widget.title);

複製**

父widget可以通過以下方式訪問其子級的狀態

snackbar是scaffold的子widget

final globalkey_scaffoldkey = globalkey();

new scaffold(

key: _scaffoldkey,

title: new text(widget.title == null ? 'add' : 'edit'),

),body: new container(

padding: edgeinsets.all(20.0),

child: new column(

mainaxisalignment: mainaxisalignment.start,

children: [

new container(

margin: edgeinsets.fromltrb(0, 20, 0, 0),

child: new raisedbutton(

color: colors.purple,

textcolor: color(0xffffffff),

onpressed: () ,

child: new text('儲存'),),)

],),

));複製**

floatingactionbutton: scaffoldbutton(

onpressedbutton: () ,

));class scaffoldbutton extends statelesswidget );

final voidcallback onpressedbutton;

@override

widget build(buildcontext context) ');

scaffold.of(context).showsnackbar(

snackbar(content: text('i am context from scaffold')));

onpressedbutton();

},tooltip: 'increment',

child: new icon(icons.add),

);}}

複製**

final myexposingwidget widget = context.ancestorwidgetofexacttype(myexposingwidget);

final myexposingwidgetstate state = widget?.mystate;

複製**

inheritedwidget是乙個特殊的widget,您可以將其作為另乙個子樹的父級放在widgets樹中。該子樹的所有小部件都必須能夠與該inheritedwidget公開的資料進行互動。

Flutter 的生命週期

如果你是 android ios react vue 的開發人員,那麼你一定不會對生命週期感到陌生,當你在學習 flutter 的時候,flutter 也有自己的生命週期。本篇文章就講講 flutter 的生命週期,從而知道應該在 來寫業務邏輯。flutter 的生命週期分為兩個部分 widget ...

Flutter 的生命週期

如果你是 android ios react vue 的開發人員,那麼你一定不會對生命週期感到陌生,當你在學習 flutter 的時候,flutter 也有自己的生命週期。本篇文章就講講 flutter 的生命週期,從而知道應該在 來寫業務邏輯。flutter 的生命週期分為兩個部分 widget ...

React 生命週期 生命週期方法

生命週期 掛載 更新 解除安裝 元件被建立 執行初始化 並被掛載到dom中,完成元件的第一次渲染 constructor props getderivedstatefromprops props,state render componentdidmount 元件被建立時會首先呼叫元件的構造方法,接受...