パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v5.0.0

redux

Redux は、Dart および Flutter アプリ用の予測可能な状態コンテナーです。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
8.3万
いいね数
417
Pub ポイント
135

パッケージをインストール

flutter pub add redux

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

Reduxは、JavaScriptのReduxを参考にしたDartおよびFlutterアプリケーション向けの予測可能な状態管理ソリューションです。純粋なリデューサ関数を通じて一貫した更新を保証する中央ストアを提供します。ミドルウェアサポートと開発者ツールとの統合により、デバッグやタイムトラベル機能が可能になります。スケーラビリティを意識して設計されており、複数のコンポーネント間で構造的な状態処理が必要な中規模から大規模なアプリに最適です。

用途

  • 複雑なアプリケーション状態の管理
  • タイムトラベルデバッグの有効化
  • 大規模なFlutterアプリケーションのサポート
  • 副作用のためのミドルウェアとの統合
  • 状態論理におけるチーム協働を支援する

主な機能

  • 集中型状態ストア
  • 不変状態の更新
  • ミドルウェアのサポート
  • DevTools の統合
  • 予測可能な状態遷移

適している対象

  • 大規模なFlutterプロジェクト
  • 構造化された状態管理が必要なチーム
  • デバッグ機能を必要とするアプリ
  • Redux パターンに精通した開発者
  • 複雑なデータフローを持つプロジェクト

注意事項

  • 初心者には学習曲線が急峻です
  • 必要なボイラープレートコード
  • シンプルなアプリには過剰
  • 状態の設計に注意が必要です
  • 制限された組み込みの非同期処理

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

Build Status codecov Flutter Community: redux

Redux for Dart using generics for typed State. It includes a rich ecosystem of Docs, Middleware, Dev Tools and can be combined with Flutter using the flutter_redux package.

Docs

  • Motivation and Principles - Learn why Redux might make sense for your app and the principles behind it.
  • Basics - Introduction to the core concepts in Redux
  • Combining Reducers - combineReducers works a bit differently in Dart than it does in JS. Learn why, and how to combine reducers in a type-safe way!
  • Async with Middleware - Learn how to make async calls, such as to a web service or local database, with Redux.
  • Use Selectors to Query Data in the Store - Learn how to write functions to provide consistent access to data in your App State.
  • API Documentation - Rich documentation included in the source code and generated by DartDoc.

Flutter Examples

To integrate Redux.dart with Flutter, please use the flutter_redux package.

Beginner
Intermediate
Advanced

Middleware

  • redux_logging - Connects a Logger to a Store, and can print out actions as they're dispatched to your console.
  • redux_thunk - Allows you to dispatch functions that perform async work as actions.
  • redux_future - For handling Dart Futures that are dispatched as Actions.
  • redux_epics - Middleware that allows you to work with Dart Streams of Actions to perform async work.

Dev Tools

The redux_dev_tools library allows you to create a DevToolsStore during dev mode in place of a normal Redux Store.

This DevToolsStore will act exactly like a normal Store at first. However, it will also allow you to travel back and forth throughout the States of your app or recompute the State of your app by replaying all actions through your reducers. This works perfectly with Hot Reloading!

You can combine the DevToolsStore with your own UI to travel in time, or use one of the existing options for the platform you're working with:

Additional Utilities

  • reselect - Efficiently derive data from your Redux Store with memoized functions.
  • redux_persist - Persist Redux State, works for Web and Flutter

Usage

import 'package:redux/redux.dart';

// Create typed actions. You will dispatch these in order to
// update the state of your application.
enum Actions {
  increment,
  decrement,
}

// Create a Reducer. A reducer is a pure function that takes the 
// current State (int) and the Action that was dispatched. It should
// combine the two into a new state without mutating the state passed
// in! After the state is updated, the store will emit the update to 
// the `onChange` stream.
// 
// Because reducers are pure functions, they should not perform any 
// side-effects, such as making an HTTP request or logging messages
// to a console. For that, use Middleware.
int counterReducer(int state, action) {
  if (action == Actions.increment) {
    return state + 1;
  } else if (action == Actions.decrement) {
    return state - 1;
  }
  
  return state;
}

// A piece of middleware that will log all actions with a timestamp
// to your console!
// 
// Note, this is just an example of how to write your own Middleware.
// See the redux_logging package on pub for a pre-built logging 
// middleware.
loggingMiddleware(Store<int> store, action, NextDispatcher next) {
  print('${new DateTime.now()}: $action');

  next(action);
}

main() {
  // Create the store with our Reducer and Middleware
  final store = new Store<int>(
    counterReducer, 
    initialState: 0, 
    middleware: [loggingMiddleware],
  );

  // Render our State right away
  render(store.state);
  
  // Listen to store changes, and re-render when the state is updated
  store.onChange.listen(render);

  // Attach a click handler to a button. When clicked, the `INCREMENT` action
  // will be dispatched. It will then run through the reducer, updating the 
  // state.
  //
  // After the state changes, the html will be re-rendered by our `onChange`
  // listener above. 
  querySelector('#increment').onClick.listen((_) {
    store.dispatch(Actions.increment);
  });
}

render(int state) {
  querySelector('#value').innerHtml = '${state}';
}

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト

ランキング