Flutter狀態管理初探

2021-10-06 03:16:09 字數 2225 閱讀 6002

本篇文章的主要內容是對flutter中狀態管理的方式及不同方式的選擇進行介紹。

本文首發於我的個人部落格 技術公館(wcc.im) : flutter狀態管理初探

常見的狀態管理方式有三種,分別是由widget自身進行管理,由父widget進行管理和由widget自身及父widget混合進行管理。

在對三種常見的狀態管理方式進行分析時,我們定義了3個tapbox,每個tapbox可表示啟用與未啟用。這樣tapbox就是乙個有狀態的widget。

//------------------------- tapboxa ----------------------------------

class tapboxa extends statefulwidget ) : super(key: key);

@override

_tapboxastate createstate() => _tapboxastate();

}class _tapboxastate extends state);

} widget build(buildcontext context)

}

由widget自身進行狀態管理非常簡單,由tapboxa的狀態類進行狀態管理。使用_active來決定當前值與顏色並且使用_handletap來改變其值。

//------------------------ parentwidget --------------------------------

class parentwidget extends statefulwidget

class _parentwidgetstate extends state);

} @override

widget build(buildcontext context)

}//------------------------- tapboxb ----------------------------------

class tapboxb extends statelesswidget )

: super(key: key);

final bool active;

final valuechangedonchanged;

void _handletap()

widget build(buildcontext context)

}

由父widget進行管理主要有:

_active

_handletapboxchanged()

而子widget主要的特點則是:

statelesswidget
//---------------------------- parentwidget ----------------------------

class parentwidget extends statefulwidget

class _parentwidgetstate extends state);

} @override

widget build(buildcontext context)

}//----------------------------- tapboxc ------------------------------

class tapboxc extends statefulwidget )

: super(key: key);

final bool active;

final valuechangedonchanged;

_tapboxcstate createstate() => _tapboxcstate();

}class _tapboxcstate extends state);

} void _handletapup(tapupdetails details) );

} void _handletapcancel() );

} void _handletap()

widget build(buildcontext context)

}

可以看到這種模式只是將前兩種模式進行結合。在示例中,通過_highlight增加了在tapbox邊緣增加邊框的狀態,該狀態由widget自身進行管理,而_active狀態則由父widget進行管理。

狀態管理方式的選擇總的來說通過以下方式:

Flutter區域性狀態管理

如前面所說,它其實對子widget進行了一次包裝,提供data,proxywidget定義了如何包裝widget inheritedwidget proxywidget widget 在widget樹建立的時候,會通過builderowner建立inheritedelement,由inherited...

Flutter 狀態管理 實踐記錄

flutter裡面最重要的應該就是 狀態管理剛開始做的乙個問題,statefulwidget的狀態應該被誰管理?widget本身?父widget?還是其他物件?以下是管理狀態的最常見的方法 舉個例子 比如 checkbox 裡面的資料到底是給誰管理比較方便 官方的原則是 因此,如果是checkbox...

Flutter 基礎元件 狀態管理

乙個永恆的主題,狀態 state 管理 無論是在react vue 兩者都是支援響應式程式設計的web開發框架 還是flutter中,他們討論的問題和解決的思想都是一致的。乙個問題,statefulwidget的狀態應該被誰管理?widget本身?父widget?都會?還是另乙個物件?答案是取決於實...