dispatch<T> method
Execute action through middleware chain
Implementation
Future<T> dispatch<T>(Action action) async {
Action currentAction = action;
// Execute before middleware
for (final middleware in _middlewares) {
currentAction = await middleware.before(currentAction) ?? currentAction;
}
// Execute action
T result;
try {
result = await currentAction.execute() as T;
} catch (e, stackTrace) {
// Execute error middleware
for (final middleware in _middlewares) {
await middleware.onError(e, stackTrace, currentAction);
}
rethrow;
}
// Execute after middleware
for (final middleware in _middlewares) {
await middleware.after(currentAction, result);
}
return result;
}