搜索插件、代码仓与 APP 分类

插件详情v5.0.0

redux

Redux 是用于 Dart 和 Flutter 应用的可预测状态容器

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
8.3万
喜欢数
417
Pub 分数
135

安装插件

flutter pub add redux

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Redux 是一个为 Dart 和 Flutter 应用程序设计的可预测状态管理解决方案,灵感来自 JavaScript 中的 Redux。它提供了一个集中式存储来管理应用状态,通过纯还原函数确保一致的状态更新。支持中间件和开发工具集成,能够实现调试和时间旅行功能。专为可扩展性设计,非常适合需要在多个组件间进行结构化状态处理的中大型应用程序。

适合场景

  • 管理复杂的应用程序状态
  • 启用时间旅行调试
  • 支持大规模 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}';
}

所属分类

源码仓库

使用此插件的项目

所在榜单