狀態管理方法的列表
- 一般概述
- Provider
- Riverpod
- setState
- ValueNotifier & InheritedNotifier
- InheritedWidget & InheritedModel
- June
- Redux
- Fish-Redux
- BLoC / Rx
- GetIt
- MobX
- Dart Board
- Flutter Commands
- Binder
- GetX
- states_rebuilder
- Triple Pattern (分段狀態模式)
- solidart
- flutter_reactive_value
- Elementary
狀態管理是一個複雜的主題。如果您覺得某些問題尚未獲得解答,或者這些頁面上描述的方法不適用於您的使用案例,那您可能是對的。
請參考以下連結以了解更多資訊,其中許多是由 Flutter 社群貢獻的
一般概述
#選擇方法前需要考慮的事項。
- 狀態管理簡介,這是本節的開頭(對於那些直接來到此選項頁面而錯過先前頁面的人)
- Flutter 中務實的狀態管理,來自 Google I/O 2019 的影片
- Flutter 架構範例,由 Brian Egan 提供
Provider
#- 簡單的應用程式狀態管理,本節的前一頁
- Provider 套件
Riverpod
#Riverpod 的運作方式與 Provider 類似。它提供編譯安全性,並在不依賴 Flutter SDK 的情況下進行測試。
setState
#用於 widget 特定、短暫狀態的底層方法。
- 將互動性加入您的 Flutter 應用程式,Flutter 教學課程
- Google Flutter 中的基本狀態管理,由 Agung Surya 提供
ValueNotifier & InheritedNotifier
#一種僅使用 Flutter 提供的工具來更新狀態並將變更通知 UI 的方法。
- 使用 ValueNotifier 和 InheritedNotifier 的狀態管理,由 Tadas Petra 提供
InheritedWidget & InheritedModel
#用於在 widget 樹中的祖先和子代之間進行通訊的底層方法。這就是 provider
和許多其他方法在底層所使用的。
以下由講師指導的影片工作坊涵蓋如何使用 InheritedWidget
其他有用的文件包括
- InheritedWidget 文件
- 使用 InheritedWidgets 管理 Flutter 應用程式狀態,由 Hans Muller 提供
- 繼承 Widget,由 Mehmet Fidanboylu 提供
- 有效使用 Flutter 繼承 Widget,由 Eric Windmill 提供
- Widget - 狀態 - 內容 - InheritedWidget,由 Didier Bolelens 提供
June
#一個輕量且現代的狀態管理函式庫,專注於提供類似 Flutter 內建狀態管理的模式。
Redux
#許多網頁開發人員熟悉的狀態容器方法。
- 使用 Redux 和 Flutter 進行動畫管理,DartConf 2018 的影片 Medium 上的隨附文章
- Flutter Redux 套件
- Redux Saga 中介軟體 Dart 和 Flutter,由 Bilal Uslu 提供
- Flutter 中 Redux 簡介,由 Xavi Rigau 提供
- Flutter + Redux — 如何製作購物清單應用程式,由 Paulina Szklarska 在 Hackernoon 上提供
- 使用 Redux 在 Flutter 中建置 TODO 應用程式 (CRUD) — 第 1 部分,Tensor Programming 的影片
- Flutter Redux Thunk,範例,由 Jack Wong 提供
- 使用 Redux 建置 (大型) Flutter 應用程式,由 Hillel Coren 提供
- Fish-Redux – 基於 Redux 的組裝式 Flutter 應用程式框架,由阿里巴巴提供
- Async Redux – 沒有樣板的 Redux。允許同步和非同步 reducer,由 Marcelo Glasberg 提供
- Flutter 遇上 Redux:管理 Flutter 應用程式狀態的 Redux 方法,由 Amir Ghezelbash 提供
- Redux 和 epics 可在 Flutter 應用程式中更好地組織程式碼,由 Nihad Delic 提供
- Flutter_Redux_Gen - VS Code 外掛程式,用於產生樣板程式碼,由 Balamurugan Muthusamy (BalaDhruv) 提供
- Flutter 動畫工作室,由 Gianluca Romeo 提供
Fish-Redux
#Fish Redux 是一個基於 Redux 狀態管理的組裝式 Flutter 應用程式框架。它適用於建置中大型應用程式。
- Fish-Redux-Library 套件,由阿里巴巴提供
- Fish-Redux-Source,專案程式碼
- Flutter-Movie,一個非簡單的範例,示範如何使用 Fish Redux,包含 30 多個畫面、graphql、付款 API 和媒體播放器。
BLoC / Rx
#一系列基於串流/可觀察的模式。
- 使用 BLoC 模式架構您的 Flutter 專案,由 Sagar Suri 提供
- BloC 函式庫,由 Felix Angelov 提供
- 反應式程式設計 - 串流 - BLoC - 實際使用案例,由 Didier Boelens 提供
GetIt
#一個基於服務定位器的狀態管理方法,不需要 BuildContext
。
- GetIt 套件,服務定位器。它也可以與 BloC 一起使用。
- GetIt Mixin 套件,一個將
GetIt
完成為完整狀態管理解決方案的 mixin。 - GetIt Hooks 套件,與 mixin 相同,如果您已經使用
flutter_hooks
。 - 適用於極簡主義者的 Flutter 狀態管理,由 Suragch 提供
MobX
#一個基於可觀察對象和反應的熱門函式庫。
Dart Board
#一個適用於 Flutter 的模組化功能管理框架。Dart Board 旨在幫助封裝和隔離功能,包括範例/框架、小型核心和許多現成的分離功能,例如偵錯、記錄、驗證、redux、定位器、粒子系統等等。
Flutter Commands
#使用命令模式且基於 ValueNotifiers
的反應式狀態管理。最好與 GetIt 搭配使用,但也可以與 Provider
或其他定位器一起使用。
- Flutter Command 套件
- RxCommand 套件,基於
Stream
的實作。
Binder
#一個在其核心使用 InheritedWidget
的狀態管理套件。部分靈感來自 recoil。此套件提倡關注點分離。
- Binder 套件
- Binder 範例
- Binder 代码片段,vscode 代码片段,可以更高效地使用 Binder
GetX
#一個簡化的反應式狀態管理解決方案。
- GetX 套件
- GetX Flutter Firebase Auth 範例,由 Jeff McMorris 提供
states_rebuilder
#一種將狀態管理與相依性注入解決方案和整合式路由器結合的方法。如需更多資訊,請參閱以下資訊
Triple Pattern (分段狀態模式)
#Triple 是一種用於狀態管理的模式,它使用 Streams
或 ValueNotifier
。此機制(之所以暱稱為triple,是因為串流始終使用三個值:Error
、Loading
和 State
),基於分段狀態模式。
如需更多資訊,請參考以下資源
- Triple 文件
- Flutter Triple 套件
- Triple Pattern:Flutter 中用於狀態管理的新模式 (部落格文章以葡萄牙語撰寫,但可以自動翻譯)
- 影片:Kevlin Ossada 的 Flutter Triple Pattern (以英語錄製)
solidart
#一個靈感來自 SolidJS 的簡單但功能強大的狀態管理解決方案。
flutter_reactive_value
#flutter_reactive_value
函式庫可能為 Flutter 中的狀態管理提供最不複雜的解決方案。它可能可以幫助 Flutter 新手將反應性新增至 UI,而不會像先前描述的機制那樣複雜。flutter_reactive_value
函式庫在 ValueNotifier
上定義了 reactiveValue(BuildContext)
擴充方法。此擴充功能允許 Widget
擷取 ValueNotifier
的目前值,並將 Widget
訂閱到 ValueNotifier
的值變更。如果 ValueNotifier
的值變更,Widget
會重新建置。
flutter_reactive_value
原始碼和文件
Elementary
#Elementary 是一種在 Flutter 中使用 MVVM 建置應用程式的簡單且可靠的方法。它透過責任區分、高效的重新建置、輕鬆的測試能力和提升團隊生產力,提供純粹的 Flutter 體驗。
除非另有說明,本網站上的文件皆反映 Flutter 的最新穩定版本。本頁面最後更新於 2024-11-17。 檢視原始碼 或 回報問題。