'The foundational principle of AsyncRedux: the only way to change the
Scanned 9/4/2026
Install to Claude Code
npx -y skills add majiayu000/claude-skill-registry-data --skill asyncredux-dispatching-actions --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Asyncredux Dispatching Actions?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-asyncredux-dispatching-actions-claude-skill-registry-data)More formats (shields.io, HTML) on the badges page.
---
name: asyncredux-dispatching-actions
description: 'The foundational principle of AsyncRedux: the only way to change the
application state is by dispatching actions. You can dispatch from widgets (via
context extensions) or from within other actions.'
---
---
name: asyncredux-dispatching-actions
description: Dispatch actions using all available methods: `dispatch()`, `dispatchAndWait()`, `dispatchAll()`, `dispatchAndWaitAll()`, and `dispatchSync()`. Covers dispatching from widgets via context extensions and from within other actions.
---
# Dispatching Actions
The foundational principle of AsyncRedux: **the only way to change the application state is by dispatching actions.** You can dispatch from widgets (via context extensions) or from within other actions.
## Five Dispatch Methods
### 1. dispatch()
The standard method that returns immediately. For synchronous actions, state updates before return; for async actions, the process begins and completes later.
```dart
dispatch(MyAction());
```
### 2. dispatchAndWait()
Returns a `Future` that completes when the action finishes and state changes, regardless of whether the action is sync or async. Returns an `ActionStatus` object.
```dart
var status = await dispatchAndWait(MyAction());
if (status.isCompletedOk) {
Navigator.pop(context);
}
```
### 3. dispatchAll()
Dispatches multiple actions in parallel, returning the list of dispatched actions.
```dart
dispatchAll([BuyAction('IBM'), SellAction('TSLA')]);
```
### 4. dispatchAndWaitAll()
Dispatches actions in parallel and waits for all to complete.
```dart
await dispatchAndWaitAll([
BuyAction('IBM'),
SellAction('TSLA'),
]);
```
### 5. dispatchSync()
Like `dispatch()` but throws a `StoreException` if the action is asynchronous. Use when synchronous execution is mandatory.
```dart
dispatchSync(MyAction());
```
## Dispatching from Widgets
All dispatch methods are available as `BuildContext` extensions:
```dart
context.dispatch(Action());
context.dispatchAll([Action1(), Action2()]);
await context.dispatchAndWait(Action());
await context.dispatchAndWaitAll([Action1(), Action2()]);
context.dispatchSync(Action());
```
Example button implementation:
```dart
ElevatedButton(
onPressed: () => context.dispatch(Increment()),
child: Text('Increment'),
)
```
For async dispatch in callbacks:
```dart
ElevatedButton(
onPressed: () async {
var status = await context.dispatchAndWait(SaveAction());
if (status.isCompletedOk) {
Navigator.pop(context);
}
},
child: Text('Save'),
)
```
## Dispatching from Within Actions
All dispatch methods are available inside actions via the `ReduxAction` base class:
```dart
class MyAction extends ReduxAction<AppState> {
Future<AppState?> reduce() async {
// Dispatch another action and wait for it
await dispatchAndWait(LoadDataAction());
// Dispatch without waiting
dispatch(LogAction('Data loaded'));
return state.copy(loaded: true);
}
}
```
### Dispatching in before() and after()
You can dispatch actions in the `before()` and `after()` lifecycle methods:
```dart
class MyAction extends ReduxAction<AppState> {
Future<AppState?> reduce() async {
String description = await fetchData();
return state.copy(description: description);
}
void before() => dispatch(BarrierAction(true));
void after() => dispatch(BarrierAction(false));
}
```
## ActionStatus
The `dispatchAndWait()` method returns an `ActionStatus` object with useful properties:
```dart
var status = await dispatchAndWait(MyAction());
// Check completion state
status.isCompleted; // Action finished executing
status.isCompletedOk; // Completed without errors
status.isCompletedFailed; // Completed with errors
// Access error information
status.originalError; // Error thrown by before/reduce
status.wrappedError; // Error after wrapError() processing
// Check method completion
status.hasFinishedMethodBefore;
status.hasFinishedMethodReduce;
status.hasFinishedMethodAfter;
```
You can also access status directly from the action instance:
```dart
var action = MyAction();
await dispatchAndWait(action);
print(action.status.isCompletedOk);
```
## The notify Parameter
Dispatch methods accept an optional `notify` parameter (default `true`) that controls whether widgets rebuild on state changes:
```dart
// Dispatch without triggering widget rebuilds
dispatch(MyAction(), notify: false);
```
## Summary Table
| Method | Returns | Waits? | Use Case |
|--------|---------|--------|----------|
| `dispatch()` | `void` | No | Fire and forget |
| `dispatchAndWait()` | `Future<ActionStatus>` | Yes | Need to know when done |
| `dispatchAll()` | `List<ReduxAction>` | No | Multiple parallel actions |
| `dispatchAndWaitAll()` | `Future<void>` | Yes | Wait for all parallel actions |
| `dispatchSync()` | `void` | N/A | Enforce sync execution |
## References
URLs from the documentation:
- https://asyncredux.com/flutter/basics/dispatching-actions
- https://asyncredux.com/flutter/basics/using-the-store-state
- https://asyncredux.com/flutter/basics/sync-actions
- https://asyncredux.com/flutter/basics/async-actions
- https://asyncredux.com/flutter/basics/store
- https://asyncredux.com/flutter/advanced-actions/redux-action
- https://asyncredux.com/flutter/advanced-actions/action-status
- https://asyncredux.com/flutter/advanced-actions/before-and-after-the-reducer
- https://asyncredux.com/flutter/testing/dispatch-wait-and-expect
- https://asyncredux.com/flutter/miscellaneous/advanced-waiting
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!