搜尋分類、套件與程式碼儲存庫

套件詳情v4.1.3

flutter_flux

Flutter 的 Flux 庫,具備單向資料流,靈感來自 Reflux 與 Facebook 的 Flux 架構。

近 30 天下載
55
喜歡數
9
Pub 分數
40

安裝套件

flutter pub add flutter_flux

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Flutter Flux 是一個為 Flutter 設計的狀態管理套件,實現單向資料流,靈感來自 Facebook 的 Flux 和 Reflux 模式。它透過動作、儲存和檢視促進可預測的狀態變更,實現關注點的清晰分離。該程式庫強調簡潔與可擴展性,適用於中大型應用,其中狀態一致性與除錯至關重要。透過最少的樣板程式碼,它可使用提供的命令列工具順暢整合至 Flutter 專案中。

適用情境

  • 管理複雜的應用程式狀態
  • 建構可擴展的 Flutter 應用程式
  • 強制執行可預測的狀態轉換
  • 使用清晰的流程調試狀態變更
  • 使用一致的資料流實現響應式UI

主要特色

  • 單向資料流
  • 基於操作的狀態更新
  • 用於狀態管理的狀態儲存抽象
  • 與 Flutter widget 的簡單整合
  • 對非同步動作的支援

適合對象

  • 熟悉 Flux 架構的開發者
  • 需要嚴格狀態控制的專案
  • 重視可維護狀態邏輯的團隊
  • 中大型 Flutter 應用
  • 需要清晰調試路徑的應用程式

使用建議

  • 初學者的學習曲線更陡峭
  • 需要理解 Flux 概念
  • 不如一些現代的狀態管理解決方案靈活
  • 與替代方案相比,社群支援有限
  • 不適合狀態極少的簡單應用

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

flutter_flux

A Dart app architecture library with uni-directional data flow inspired by RefluxJS and Facebook's Flux.

This is an experimental package and does not have official support from the Flutter team. However, feedback is most welcome!


Overview

flux-diagram

flutter_flux implements a uni-directional data flow pattern comprised of Actions, Stores, and StoreWatchers. It is based on w_flux, but modified to use Flutter instead of React.

  • Actions initiate mutation of app data that resides in Stores.
  • Data mutations within Stores trigger re-rendering of app view (defined in StoreWatcher).
  • Flutter Widgets and other interaction sources dispatch Actions in response to user interaction.
  • and the cycle continues...

What's Included

Action

An Action is a command that can be dispatched (with an optional data payload) and listened to.

In flutter_flux, Actions are the sole driver of application state change. Widgets and other objects dispatch Actions in response to user interaction with the rendered view. Stores listen for these Action dispatches and mutate their internal data in response, taking the Action payload into account as appropriate.

import 'package:flutter_flux/flutter_flux.dart';

// define an action
final Action<String> displayString = new Action<String>();

// dispatch the action with a payload
displayString('somePayload');

// listen for action dispatches
displayString.listen(_displayAlert);

_displayAlert(String payload) {
  print(payload);
}

BONUS: Actions are await-able!

They return a Future that completes after all registered Action listeners complete. It's NOT generally recommended to use this feature within normal app code, but it is quite useful in unit test code.

Store

A Store is a repository and manager of app state. The base Store class provided by flutter_flux should be extended to fit the needs of your app and its data. App state may be spread across many independent stores depending on the complexity of the app and your desired app architecture.

By convention, a Store's internal data cannot be mutated directly. Instead, Store data is mutated internally in response to Action dispatches. Stores should otherwise be considered read-only, publicly exposing relevant data ONLY via getter methods. This limited data access ensures that the integrity of the uni-directional data flow is maintained.

A Store can be listened to to receive external notification of its data mutations. Whenever the data within a Store is mutated, the trigger method is used to notify any registered listeners that updated data is available. In flutter_flux, StoreWatchers listen to Stores, typically triggering re-rendering of UI elements based on the updated Store data.

import 'package:flutter_flux/flutter_flux.dart';

class RandomColorStore extends Store {

  // Public data is only available via getter method
  String _backgroundColor = 'gray';
  String get backgroundColor => _backgroundColor;

  // Actions relevant to the store are passed in during instantiation
  RandomColorActions _actions;

  RandomColorStore(RandomColorActions this._actions) {
    // listen for relevant action dispatches
    _actions.changeBackgroundColor.listen(_changeBackgroundColor);
  }

  _changeBackgroundColor(_) {
    // action dispatches trigger internal data mutations
    _backgroundColor = '#' + (new Random().nextDouble() * 16777215).floor().toRadixString(16);

    // trigger to notify external listeners that new data is available
    trigger();
  }
}

BONUS: Stores provide an optional terse syntax for action -> data mutation -> trigger operations.

// verbose syntax
actions.incrementCounter.listen(_handleAction);

_handleAction(payload) {
    // perform data mutation
    counter += payload;
    trigger();
  }

// equivalent terse syntax
triggerOnAction(actions.incrementCounter, (payload) => counter += payload);

Examples

Simple examples of flutter_flux usage can be found in the example directory. The example README includes instructions for building / running them.


External Consumption

flutter_flux implements a uni-directional data flow within an isolated application or code module. If flutter_flux is used as the internal architecture of a library, this internal data flow should be considered when defining the external API.

  • External API methods intended to mutate internal state should dispatch Actions, just like any internal user interaction.
  • External API methods intended to query internal state should leverage the existing read-only Store getter methods.
  • External API streams intended to notify the consumer about internal state changes should be dispatched from the internal Stores, similar to their triggers.

所屬分類

依賴

依賴清單 1 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。