本篇文章的主要內容是對flutter中狀態管理的方式及不同方式的選擇進行介紹。
本文首發於我的個人部落格 技術公館(wcc.im) : flutter狀態管理初探
常見的狀態管理方式有三種,分別是由widget自身進行管理,由父widget進行管理和由widget自身及父widget混合進行管理。
在對三種常見的狀態管理方式進行分析時,我們定義了3個tapbox,每個tapbox可表示啟用與未啟用。這樣tapbox就是乙個有狀態的widget。
//------------------------- tapboxa ----------------------------------由widget自身進行狀態管理非常簡單,由tapboxa的狀態類進行狀態管理。使用class tapboxa extends statefulwidget ) : super(key: key);
@override
_tapboxastate createstate() => _tapboxastate();
}class _tapboxastate extends state);
} widget build(buildcontext context)
}
_active
來決定當前值與顏色並且使用_handletap
來改變其值。
//------------------------ parentwidget --------------------------------由父widget進行管理主要有: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)
}
_active而子widget主要的特點則是:_handletapboxchanged()
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?都會?還是另乙個物件?答案是取決於實...