好幾天一直看Flutter的設(shè)計(jì)模型,因?yàn)閒lutter 是靠State 來刷新UI的举塔,這樣就出現(xiàn)怎么才能把UI跟邏輯隔離呢,iOS 有mvc ?mvvm ?mvp 等如果直接用iOS 的思想是走不通的芬为,自己也查了一下Flitter 的狀態(tài)管理有 StatefulWidget 和 setState() 模闲,InheritedWidget,Scoped model 忘嫉,BLoC ?荤牍,Redux 等等案腺,在這里介紹一下它們的區(qū)別?主講bloc,這是官方推薦的管理模式
好的框架要求
? ? 能管理好全局狀態(tài)和本地狀態(tài)
? ?UI 邏輯和業(yè)務(wù)邏輯應(yīng)該是分離的
? ?在框架的幫助下可以寫出高質(zhì)量的代碼
? ?框架應(yīng)該提升 App 的性能
? ?框架要容易理解康吵,便于擴(kuò)展
一區(qū)別
1.?StatefulWidget 和 setState()?
可以管理state 劈榨,相對(duì)于管理數(shù)據(jù)較少的界面還可以,涉及到數(shù)據(jù)量大且共用的數(shù)據(jù)等就顯著不是那么友好了晦嵌,
主要區(qū)別:UI 邏輯和業(yè)務(wù)邏輯沒有分離 且只能管理本地狀態(tài)
2.?InheritedWidget
數(shù)據(jù)共享同辣,可以把這個(gè)狀態(tài)共享給多個(gè)界面使用,InheritedWidget 只能管理全局狀態(tài)耍铜,而且沒有涉及到 UI 邏輯和業(yè)務(wù)邏輯的分離邑闺,大量人員合作開發(fā)不建議使用
3.?Scoped model
可以對(duì)全局狀態(tài)進(jìn)行管理,數(shù)據(jù)從上到下傳遞,也可以從下到上傳遞,
但是數(shù)據(jù)和UI沒有隔離棕兼,不便維護(hù)陡舅,造成單個(gè)dart 臃腫 ,無法管理本地狀態(tài)
4?BLoc
響應(yīng)式編程伴挚,相當(dāng)于mvvm 靶衍,既能管理本地狀態(tài)也能管理全局狀態(tài),可以從上往下茎芋,也可以從下往上傳颅眶,維護(hù)方便,數(shù)據(jù)于UI隔離田弥,目前比較好的框架涛酗,
現(xiàn)在你知道怎么選擇了嗎下篇重點(diǎn)講bloc實(shí)踐下一節(jié)Flitter—bloc