CINXE.COM
redux | Dart package
<!DOCTYPE html> <html lang="en-us"><head><script src="https://www.googletagmanager.com/gtm.js?id=GTM-MX6DBN9" async="async"></script><script src="/static/hash-o6oemknr/js/gtm.js" async="async"></script><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="robots" content="noindex"/><meta name="twitter:card" content="summary"/><meta name="twitter:site" content="@dart_lang"/><meta name="twitter:description" content="Redux is a predictable state container for Dart and Flutter apps"/><meta name="twitter:image" content="https://pub.dev/static/hash-o6oemknr/img/pub-dev-icon-cover-image.png"/><meta property="og:type" content="website"/><meta property="og:site_name" content="Dart packages"/><meta property="og:title" content="redux | Dart package"/><meta property="og:description" content="Redux is a predictable state container for Dart and Flutter apps"/><meta property="og:image" content="https://pub.dev/static/hash-o6oemknr/img/pub-dev-icon-cover-image.png"/><title>redux | Dart package</title><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Google+Sans:wght@400;500;700&family=Google+Sans+Display:wght@400&family=Google+Sans+Text:wght@400;500;700&family=Google+Sans+Mono:wght@400;700&display=swap"/><link rel="shortcut icon" href="/favicon.ico?hash=nk4nss8c7444fg0chird9erqef2vkhb8"/><link rel="stylesheet" href="https://www.gstatic.com/glue/v25_0/ccb.min.css"/><link rel="search" type="application/opensearchdescription+xml" title="Dart packages" href="/osd.xml"/><link rel="canonical" href="https://pub.dev/packages/redux"/><meta name="description" content="Redux is a predictable state container for Dart and Flutter apps"/><link rel="alternate" type="application/atom+xml" title="Updated Packages Feed for Pub" href="/feed.atom"/><link rel="stylesheet" type="text/css" href="/static/hash-o6oemknr/material/bundle/styles.css"/><link rel="stylesheet" type="text/css" href="/static/hash-o6oemknr/css/style.css"/><script src="/static/hash-o6oemknr/material/bundle/script.min.js" defer="defer"></script><script src="/static/hash-o6oemknr/js/script.dart.js" defer="defer"></script><script src="https://www.gstatic.com/brandstudio/kato/cookie_choice_component/cookie_consent_bar.v3.js" defer="defer" data-autoload-cookie-consent-bar="true"></script><meta name="pub-page-data" content="eyJwa2dEYXRhIjp7InBhY2thZ2UiOiJyZWR1eCIsInZlcnNpb24iOiI1LjAuMCIsImxpa2VzIjozOTUsInB1Ymxpc2hlcklkIjoiZmx1dHRlcmNvbW11bml0eS5kZXYiLCJpc0Rpc2NvbnRpbnVlZCI6ZmFsc2UsImlzTGF0ZXN0Ijp0cnVlfSwic2Vzc2lvbkF3YXJlIjpmYWxzZX0="/><link rel="preload" href="/static/hash-o6oemknr/highlight/highlight-with-init.js" as="script"/></head><body class="light-theme"><script src="/static/hash-o6oemknr/js/dark-init.js"></script><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MX6DBN9" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div class="site-header"><button class="hamburger" aria-label="menu toggle"></button><a class="logo" href="/"><img class="site-logo" src="/static/hash-o6oemknr/img/pub-dev-logo.svg" alt="" width="140" height="30" role="presentation"/></a><div class="site-header-space"></div><div class="site-header-mask"></div><div class="site-header-search"><form action="/packages" method="GET"><input class="site-header-search-input" name="q" placeholder="New search..." autocomplete="on" title="Search"/></form></div><nav class="site-header-nav scroll-container"><div class="nav-login-container"><button id="-account-login" class="nav-main-button link">Sign in</button></div><div class="nav-container nav-help-container hoverable"><button class="nav-main-button">Help</button><div class="nav-hover-popup"><div class="nav-table-columns"><div class="nav-table-column"><h3>Pub.dev</h3><a class="nav-link" href="/help/search" rel="noopener" target="_blank">Searching for packages</a><a class="nav-link" href="/help/scoring" rel="noopener" target="_blank">Package scoring and pub points</a></div><div class="nav-table-column"><h3>Flutter</h3><a class="nav-link" href="https://flutter.dev/using-packages/" rel="noopener" target="_blank">Using packages</a><a class="nav-link" href="https://flutter.dev/developing-packages/" rel="noopener" target="_blank">Developing packages and plugins</a><a class="nav-link" href="https://dart.dev/tools/pub/publishing" rel="noopener" target="_blank">Publishing a package</a></div><div class="nav-table-column"><h3>Dart</h3><a class="nav-link" href="https://dart.dev/guides/packages" rel="noopener" target="_blank">Using packages</a><a class="nav-link" href="https://dart.dev/tools/pub/publishing" rel="noopener" target="_blank">Publishing a package</a></div></div></div></div><div class="nav-container nav-help-container-mobile foldable"><h3 class="foldable-button">Pub.dev <img class="foldable-icon" src="/static/hash-o6oemknr/img/nav-mobile-foldable-icon.svg" alt="toggle folding of the section" width="13" height="6"/></h3><div class="foldable-content"><a class="nav-link" href="/help/search" rel="noopener" target="_blank">Searching for packages</a><a class="nav-link" href="/help/scoring" rel="noopener" target="_blank">Package scoring and pub points</a></div></div><div class="nav-container nav-help-container-mobile foldable"><h3 class="foldable-button">Flutter <img class="foldable-icon" src="/static/hash-o6oemknr/img/nav-mobile-foldable-icon.svg" alt="toggle folding of the section" width="13" height="6"/></h3><div class="foldable-content"><a class="nav-link" href="https://flutter.dev/using-packages/" rel="noopener" target="_blank">Using packages</a><a class="nav-link" href="https://flutter.dev/developing-packages/" rel="noopener" target="_blank">Developing packages and plugins</a><a class="nav-link" href="https://dart.dev/tools/pub/publishing" rel="noopener" target="_blank">Publishing a package</a></div></div><div class="nav-container nav-help-container-mobile foldable"><h3 class="foldable-button">Dart <img class="foldable-icon" src="/static/hash-o6oemknr/img/nav-mobile-foldable-icon.svg" alt="toggle folding of the section" width="13" height="6"/></h3><div class="foldable-content"><a class="nav-link" href="https://dart.dev/guides/packages" rel="noopener" target="_blank">Using packages</a><a class="nav-link" href="https://dart.dev/tools/pub/publishing" rel="noopener" target="_blank">Publishing a package</a></div></div></nav></div><div id="banner-container"></div><main class="container"><div class="detail-wrapper -active -has-info-box"><div class="detail-banners"><a href="https://flutter.dev/docs/development/packages-and-plugins/favorites" rel="noopener" target="_blank"><img class="ff-banner ff-banner-desktop displayed-in-light-theme" src="/static/hash-o6oemknr/img/ff-banner-desktop-2x.png" alt="" width="150" height="218" title="Package is a Flutter Favorite" role="presentation"/><img class="ff-banner ff-banner-desktop displayed-in-dark-theme" src="/static/hash-o6oemknr/img/ff-banner-desktop-dark-2x.png" alt="" width="150" height="218" title="Package is a Flutter Favorite" role="presentation"/><img class="ff-banner ff-banner-mobile displayed-in-light-theme" src="/static/hash-o6oemknr/img/ff-banner-mobile-2x.png" alt="" width="94" height="116" title="Package is a Flutter Favorite" role="presentation"/><img class="ff-banner ff-banner-mobile displayed-in-dark-theme" src="/static/hash-o6oemknr/img/ff-banner-mobile-dark-2x.png" alt="" width="94" height="116" title="Package is a Flutter Favorite" role="presentation"/></a></div><div class="detail-header -is-loose"><div class="detail-container"><div class="detail-header-outer-block"><div class="detail-header-content-block"><h1 class="title">redux 5.0.0 <span class="pkg-page-title-copy"><img class="pkg-page-title-copy-icon filter-invert-on-dark" src="/static/hash-o6oemknr/img/content-copy-icon.svg" alt="copy "redux: ^5.0.0" to clipboard" width="18" height="18" title="Copy "redux: ^5.0.0" to clipboard" data-copy-content="redux: ^5.0.0" data-ga-click-event="copy-package-version"/><div class="pkg-page-title-copy-feedback"><span class="code">redux: ^5.0.0</span> copied to clipboard</div></span></h1><div class="metadata">Published <span><a class="-x-ago" href="" title="Feb 23, 2021" aria-label="3 years ago" aria-role="button" role="button" data-timestamp="1614107515666">3 years ago</a></span> • <a class="-pub-publisher" href="/publishers/fluttercommunity.dev"><img class="-pub-publisher-shield filter-invert-on-dark" src="/static/hash-o6oemknr/img/material-icon-verified.svg" alt="verified publisher" width="14" height="14" title="Published by a pub.dev verified publisher"/>fluttercommunity.dev</a><span class="package-badge" title="Package is compatible with Dart 3.">Dart 3 compatible</span></div><div class="detail-tags-and-like"><div class="detail-tags"><div class="-pub-tag-badge"><span class="tag-badge-main">SDK</span><a class="tag-badge-sub" href="/packages?q=sdk%3Adart" rel="nofollow" title="Packages compatible with Dart SDK">Dart</a><a class="tag-badge-sub" href="/packages?q=sdk%3Aflutter" rel="nofollow" title="Packages compatible with Flutter SDK">Flutter</a></div><div class="-pub-tag-badge"><span class="tag-badge-main">Platform</span><a class="tag-badge-sub" href="/packages?q=platform%3Aandroid" rel="nofollow" title="Packages compatible with Android platform">Android</a><a class="tag-badge-sub" href="/packages?q=platform%3Aios" rel="nofollow" title="Packages compatible with iOS platform">iOS</a><a class="tag-badge-sub" href="/packages?q=platform%3Alinux" rel="nofollow" title="Packages compatible with Linux platform">Linux</a><a class="tag-badge-sub" href="/packages?q=platform%3Amacos" rel="nofollow" title="Packages compatible with macOS platform">macOS</a><a class="tag-badge-sub" href="/packages?q=platform%3Aweb" rel="nofollow" title="Packages compatible with Web platform">web</a><a class="tag-badge-sub" href="/packages?q=platform%3Awindows" rel="nofollow" title="Packages compatible with Windows platform">Windows</a></div></div><div class="detail-like"><button id="-pub-like-icon-button" class="mdc-icon-button" data-ga-click-event="toggle-like" aria-pressed="false" title="Like this package"><img class="mdc-icon-button__icon" src="/static/hash-o6oemknr/img/like-inactive.svg" alt="liked status: inactive" width="18" height="18"/><img class="mdc-icon-button__icon mdc-icon-button__icon--on" src="/static/hash-o6oemknr/img/like-active.svg" alt="liked status: active" width="18" height="18"/></button><span class="likes-count"><span id="likes-count">395</span></span></div></div></div></div></div></div><div class="detail-container"><div class="detail-lead"><div class="detail-metadata-toggle"><div class="detail-metadata-toggle-icon">→</div><h3 class="detail-lead-title">Metadata</h3></div><p class="detail-lead-text">Redux is a predictable state container for Dart and Flutter apps</p><p class="detail-lead-more"><a class="detail-metadata-toggle">More...</a></p></div></div><div class="detail-body"><div class="detail-tabs"><div class="detail-tabs-wide-header"><div class="detail-container"><ul class="detail-tabs-header"><li class="detail-tab tab-button detail-tab-readme-title -active">Readme</li><li class="detail-tab tab-link detail-tab-changelog-title"><a href="/packages/redux/changelog" role="button">Changelog</a></li><li class="detail-tab tab-link detail-tab-installing-title"><a href="/packages/redux/install" role="button">Installing</a></li><li class="detail-tab tab-link detail-tab-versions-title"><a href="/packages/redux/versions" role="button">Versions</a></li><li class="detail-tab tab-link detail-tab-analysis-title"><a href="/packages/redux/score" role="button">Scores</a></li></ul></div></div><div class="detail-container detail-body-main"><div class="detail-tabs-content"><section class="tab-content detail-tab-readme-content -active markdown-body"><p><a href="https://travis-ci.org/fluttercommunity/redux.dart" rel="ugc"><img src="https://api.travis-ci.org/fluttercommunity/redux.dart.svg?branch=master" alt="Build Status"></a> <a href="https://codecov.io/gh/fluttercommunity/redux.dart" rel="ugc"><img src="https://codecov.io/gh/fluttercommunity/redux.dart/branch/master/graph/badge.svg" alt="codecov"></a> <a href="https://github.com/fluttercommunity/community" rel="ugc"><img src="https://fluttercommunity.dev/_github/header/redux" alt="Flutter Community: redux"></a></p> <p><a href="https://redux.js.org/" rel="ugc">Redux</a> for Dart using generics for typed State. It includes a rich ecosystem of <a href="#docs">Docs</a>, <a href="#middleware">Middleware</a>, <a href="#dev-tools">Dev Tools</a> and can be combined with Flutter using the <a href="https://pub.dartlang.org/packages/flutter_redux" rel="ugc">flutter_redux</a> package.</p> <h2 class="hash-header" id="docs">Docs <a href="#docs" class="hash-link">#</a></h2> <ul> <li><a href="https://github.com/fluttercommunity/redux.dart/blob/master/doc/why.md" rel="ugc">Motivation and Principles</a> - Learn why Redux might make sense for your app and the principles behind it.</li> <li><a href="https://github.com/fluttercommunity/redux.dart/blob/master/doc/basics.md" rel="ugc">Basics</a> - Introduction to the core concepts in Redux</li> <li><a href="https://github.com/fluttercommunity/redux.dart/blob/master/doc/combine_reducers.md" rel="ugc">Combining Reducers</a> - <code>combineReducers</code> works a bit differently in Dart than it does in JS. Learn why, and how to combine reducers in a type-safe way!</li> <li><a href="https://github.com/fluttercommunity/redux.dart/blob/master/doc/async.md" rel="ugc">Async with Middleware</a> - Learn how to make async calls, such as to a web service or local database, with Redux.</li> <li><a href="https://github.com/brianegan/reselect_dart/blob/master/README.md" rel="ugc">Use Selectors to Query Data in the Store</a> - Learn how to write functions to provide consistent access to data in your App State.</li> <li><a href="https://www.dartdocs.org/documentation/redux/latest" rel="ugc">API Documentation</a> - Rich documentation included in the source code and generated by DartDoc.</li> </ul> <h2 class="hash-header" id="flutter-examples">Flutter Examples <a href="#flutter-examples" class="hash-link">#</a></h2> <p>To integrate Redux.dart with Flutter, please use the <a href="https://pub.dartlang.org/packages/flutter_redux" rel="ugc">flutter_redux</a> package.</p> <h3 class="hash-header" id="beginner">Beginner <a href="#beginner" class="hash-link">#</a></h3> <ul> <li><a href="https://gitlab.com/brianegan/flutter_redux/tree/master/example" rel="ugc">Counter example from flutter_redux</a> library - A counter example demonstrating the basics of Redux + Flutter</li> </ul> <h3 class="hash-header" id="intermediate">Intermediate <a href="#intermediate" class="hash-link">#</a></h3> <ul> <li><a href="https://github.com/xqwzts/flutter-redux-todo-list" rel="ugc">flutter_redux_todo_list</a> - A flutter_redux todo list example by <a href="https://github.com/xqwzts" rel="ugc">xqwzts</a>.</li> </ul> <h3 class="hash-header" id="advanced">Advanced <a href="#advanced" class="hash-link">#</a></h3> <ul> <li><a href="https://github.com/roughike/inKino" rel="ugc">inKino App</a> - A cross platform movie and showtime browser for Finnkino cinemas built with Redux. Lots of testing included as well!</li> <li><a href="https://gitlab.com/brianegan/flutter_architecture_samples/tree/master/example/redux" rel="ugc">flutter_architecture_samples</a> - A Todo List App with local storage and multiple screens. Includes a README describing how to combine Redux with Flutter effectively.</li> <li><a href="https://github.com/MSzalek-Mobile/weight_tracker/" rel="ugc">Weight Tracking App</a> - Demonstrates how to combine Redux with Firebase to build a Flutter app by <a href="https://github.com/MarcinusX" rel="ugc">MarcinusX</a>. <ul> <li><a href="https://marcinszalek.pl/flutter/reduxing-flutter/" rel="ugc">Reduxing Flutter Firebase App</a> - Article describing how the author combined Redux with Firebase.</li> <li><a href="https://marcinszalek.pl/flutter/deleting-entry-with-undo/" rel="ugc">Deleting entry and undoing deletion in snackbar</a> - Article showing how to create "Undo" actions with Redux & Firebase.</li> </ul> </li> </ul> <h2 class="hash-header" id="middleware">Middleware <a href="#middleware" class="hash-link">#</a></h2> <ul> <li><a href="https://pub.dartlang.org/packages/redux_logging" rel="ugc">redux_logging</a> - Connects a <a href="https://pub.dartlang.org/packages/logging" rel="ugc">Logger</a> to a Store, and can print out actions as they're dispatched to your console.</li> <li><a href="https://pub.dartlang.org/packages/redux_thunk" rel="ugc">redux_thunk</a> - Allows you to dispatch functions that perform async work as actions.</li> <li><a href="https://pub.dartlang.org/packages/redux_future" rel="ugc">redux_future</a> - For handling Dart Futures that are dispatched as Actions.</li> <li><a href="https://pub.dartlang.org/packages/redux_epics" rel="ugc">redux_epics</a> - Middleware that allows you to work with Dart Streams of Actions to perform async work.</li> </ul> <h2 class="hash-header" id="dev-tools">Dev Tools <a href="#dev-tools" class="hash-link">#</a></h2> <p>The <a href="https://pub.dartlang.org/packages/redux_dev_tools" rel="ugc">redux_dev_tools</a> library allows you to create a <code>DevToolsStore</code> during dev mode in place of a normal Redux <code>Store</code>.</p> <p>This <code>DevToolsStore</code> will act exactly like a normal <code>Store</code> 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!</p> <p>You can combine the <code>DevToolsStore</code> with your own UI to travel in time, or use one of the existing options for the platform you're working with:</p> <ul> <li><em>Flutter</em> - <a href="https://pub.dartlang.org/packages/flutter_redux_dev_tools" rel="ugc">flutter_redux_dev_tools</a></li> <li><em>Web</em> - <a href="https://pub.dartlang.org/packages/angular_redux_dev_tools" rel="ugc">angular_redux_dev_tools</a></li> <li><em>Remote</em> - <a href="https://pub.dartlang.org/packages/angular_redux_dev_tools" rel="ugc">Redux Remote Devtools</a>. Connect your Redux.dart store to <a href="http://extension.remotedev.io/" rel="ugc">Remote DevTools</a> and debug in a web browser</li> </ul> <h2 class="hash-header" id="additional-utilities">Additional Utilities <a href="#additional-utilities" class="hash-link">#</a></h2> <ul> <li><a href="https://pub.dartlang.org/packages/reselect" rel="ugc">reselect</a> - Efficiently derive data from your Redux Store with memoized functions.</li> <li><a href="https://github.com/Cretezy/redux_persist" rel="ugc">redux_persist</a> - Persist Redux State, works for Web and Flutter</li> </ul> <h2 class="hash-header" id="usage">Usage <a href="#usage" class="hash-link">#</a></h2> <pre><code class="language-dart">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}'; } </code></pre> </section></div></div></div><aside class="detail-info-box"><a class="packages-scores" href="/packages/redux/score"><div class="packages-score packages-score-like"><div class="packages-score-value -has-value"><span class="packages-score-value-number">395</span><span class="packages-score-value-sign"></span></div><div class="packages-score-label">likes</div></div><div class="packages-score packages-score-health"><div class="packages-score-value -has-value"><span class="packages-score-value-number">145</span><span class="packages-score-value-sign"></span></div><div class="packages-score-label">pub points</div></div><div class="packages-score packages-score-popularity"><div class="packages-score-value -has-value"><span class="packages-score-value-number">96</span><span class="packages-score-value-sign">%</span></div><div class="packages-score-label">popularity</div></div></a><h3 class="title">Publisher</h3><p><a href="/publishers/fluttercommunity.dev"><img class="-pub-publisher-shield filter-invert-on-dark" src="/static/hash-o6oemknr/img/material-icon-verified.svg" alt="verified publisher" width="14" height="14" title="Published by a pub.dev verified publisher"/>fluttercommunity.dev</a></p><h3 class="title pkg-infobox-metadata">Metadata</h3><p>Redux is a predictable state container for Dart and Flutter apps</p><p><a class="link" href="https://github.com/fluttercommunity/redux.dart" rel="ugc">Repository (GitHub)</a><br/><a class="link" href="https://github.com/fluttercommunity/redux.dart/issues" rel="ugc">View/report issues</a><br/></p><h3 class="title">Documentation</h3><p><a class="link" href="/documentation/redux/latest/">API reference</a><br/></p><h3 class="title">License</h3><p><img class="inline-icon-img filter-invert-on-dark" src="/static/hash-o6oemknr/img/material-icon-balance.svg" alt="" width="14" height="14" role="presentation"/>MIT (<a href="/packages/redux/license">license</a>)</p><h3 class="title">More</h3><p><a href="/packages?q=dependency%3Aredux" rel="nofollow">Packages that depend on redux</a></p></aside></div><script type="application/ld+json">{"@context":"http\u003a\u002f\u002fschema.org","@type":"SoftwareSourceCode","name":"redux","version":"5.0.0","description":"redux - Redux is a predictable state container for Dart and Flutter apps","url":"https\u003a\u002f\u002fpub.dev\u002fpackages\u002fredux","dateCreated":"2016-05-17T05\u003a15\u003a51.216Z","dateModified":"2021-02-23T19\u003a11\u003a55.666169Z","programmingLanguage":"Dart","image":"https\u003a\u002f\u002fpub.dev\u002fstatic\u002fimg\u002fpub-dev-icon-cover-image.png","license":"https\u003a\u002f\u002fpub.dev\u002fpackages\u002fredux\u002flicense"}</script></div><div class="detail-metadata"><h3 class="detail-metadata-title"><span class="detail-metadata-toggle">←</span> Metadata</h3><div class="detail-info-box"><a class="packages-scores" href="/packages/redux/score"><div class="packages-score packages-score-like"><div class="packages-score-value -has-value"><span class="packages-score-value-number">395</span><span class="packages-score-value-sign"></span></div><div class="packages-score-label">likes</div></div><div class="packages-score packages-score-health"><div class="packages-score-value -has-value"><span class="packages-score-value-number">145</span><span class="packages-score-value-sign"></span></div><div class="packages-score-label">pub points</div></div><div class="packages-score packages-score-popularity"><div class="packages-score-value -has-value"><span class="packages-score-value-number">96</span><span class="packages-score-value-sign">%</span></div><div class="packages-score-label">popularity</div></div></a><h3 class="title">Publisher</h3><p><a href="/publishers/fluttercommunity.dev"><img class="-pub-publisher-shield filter-invert-on-dark" src="/static/hash-o6oemknr/img/material-icon-verified.svg" alt="verified publisher" width="14" height="14" title="Published by a pub.dev verified publisher"/>fluttercommunity.dev</a></p><h3 class="title pkg-infobox-metadata">Metadata</h3><p>Redux is a predictable state container for Dart and Flutter apps</p><p><a class="link" href="https://github.com/fluttercommunity/redux.dart" rel="ugc">Repository (GitHub)</a><br/><a class="link" href="https://github.com/fluttercommunity/redux.dart/issues" rel="ugc">View/report issues</a><br/></p><h3 class="title">Documentation</h3><p><a class="link" href="/documentation/redux/latest/">API reference</a><br/></p><h3 class="title">License</h3><p><img class="inline-icon-img filter-invert-on-dark" src="/static/hash-o6oemknr/img/material-icon-balance.svg" alt="" width="14" height="14" role="presentation"/>MIT (<a href="/packages/redux/license">license</a>)</p><h3 class="title">More</h3><p><a href="/packages?q=dependency%3Aredux" rel="nofollow">Packages that depend on redux</a></p></div><p class="detail-lead-back"><a class="detail-metadata-toggle">Back</a></p></div><div id="-screenshot-carousel" class="carousel"><fab id="-carousel-prev" class="mdc-fab carousel-prev carousel-nav" data-mdc-auto-init="MDCRipple" title="Previous" data-ga-click-event="screenshot-carousel-prev-click" tabindex="0"><div class="mdc-fab__ripple"></div><img class="mdc-fab__icon" src="/static/hash-o6oemknr/img/keyboard_arrow_left.svg" alt="previous" width="24" height="24" aria-hidden="true"/></fab><div id="-image-container" class="image-container"></div><fab id="-carousel-next" class="mdc-fab carousel-next carousel-nav" data-mdc-auto-init="MDCRipple" title="Next" data-ga-click-event="screenshot-carousel-next-click" tabindex="0"><div class="mdc-fab__ripple"></div><img class="mdc-fab__icon" src="/static/hash-o6oemknr/img/keyboard_arrow_right.svg" alt="next" width="24" height="24" aria-hidden="true"/></fab><p id="-screenshot-description" class="screenshot-description"></p></div></main><footer class="site-footer"><a class="link" href="https://dart.dev/">Dart language</a><a class="link sep" href="/report?subject=package%3Aredux&url=https%3A%2F%2Fpub.dev%2Fpackages%2Fredux">Report package</a><a class="link sep" href="/policy">Policy</a><a class="link sep" href="https://www.google.com/intl/en/policies/terms/">Terms</a><a class="link sep" href="https://developers.google.com/terms/">API Terms</a><a class="link sep" href="/security">Security</a><a class="link sep" href="https://www.google.com/intl/en/policies/privacy/">Privacy</a><a class="link sep" href="/help">Help</a><a class="link icon sep" href="/feed.atom"><img class="inline-icon" src="/static/hash-o6oemknr/img/rss-feed-icon.svg" alt="RSS" width="20" height="20" title="RSS/atom feed"/></a><a class="link icon github_issue" href="https://github.com/dart-lang/pub-dev/issues/new"><img class="inline-icon" src="/static/hash-o6oemknr/img/bug-report-white-96px.png" alt="bug report" width="20" height="20" title="Report an issue with this site"/></a></footer><script src="/static/hash-o6oemknr/highlight/highlight-with-init.js" defer="defer"></script></body></html>