result_monad
A Dart implementation of the Result Monad which allows for more expressive result generation and processing without using exceptions.
4.0.0
3.1K downloads/mo
#4612 most downloaded on pub.dev
source
What this package is like to depend on
Last release 5 months ago
23 Mar 2026
Ships fairly regularly
a new release about every 10 months
Nearly every release is documented
notes for 14 of 15 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
15 releases · first in 2021
4 releases in the last 12 months
see the full history below
Release timeline
15 releases · Nov 2021 to Mar 2026Releases
latest 15-
4.0.023 Mar 2026Release notes
Open source →- Change Ok class's field to be "value" which overrides base-class value property. Since the 3.x version has been pulled and this technically changes the field of Ok, even though it wouldn't normally be used. This technically bumps the version number to 4.0.0
-
3.0.221 Mar 2026Release notes
Open source →- Fix having version in CHANGELOG align with pub.dev version to get perfect score.
-
3.0.121 Mar 2026 -
3.0.021 Mar 2026Release notes
Open source →NOTE 1: This release has some breaking changes and an increased minimum SDK version bump from the 2.3.2 release.
NOTE 2: Many thanks to the contributions to the ADT-related updates and StackTrace functionality updates contributed by Daniel Gomez Rico ([email protected]). Some of the changes were taken through Pull Request acceptance while others were back-ported with some changes from his fork of this project
- Underlying architecture now
uses Algebraic Data Type (ADT)
functionality introduced with class modifiers and patterns
in Dart 3.0.0 in May 2023.
- This made the syntax for creating Results more compact (and preferred way to create Results now):
Result.ok('Good')=>Ok('Good)Result.error('Bad')=>Error('Bad')
- This also makes it so you can use switch statements, if statements, et cetera on return values directly, although somewhat redudant with the various aggregation operations in the library.
- Example:
- This made the syntax for creating Results more compact (and preferred way to create Results now):
// The below fold function... final value = invert(2).fold( onSuccess: (v) => v, onError: (e, trace) => e, ); // Can be expressed: final value = switch (invert(2)) { Ok o => o.value, Error e => e.cause, Result _ => throw UnimplementedError(), // there since Result isn't sealed };- Breaking change: Minimum Dart version bumped up from 2.14.4 to 3.0.0
- Breaking change: Added Stack Trace following functionality so can get insight into where the error occurred in a
chain of calls. This changed the function signatures on the following method to add access to stack traces when
processing errors
- On
Result:fold,match,withError,withErrorAsync - On
FutureResult:fold,match,withError,withErrorAsync
- On
- Add optional
StackTraceparameter onErrorresult creationError('Bad', StackTrace.current) Resulthas astackTraceproperty that can be called if and only if the type is an Error. Result can be null.ResulthasasOkandasErrorproperties for casting to specific type. This will throw an Exception if is against the underlying type for that instance.- Thanks to GitLab User DoodleSchrank for adding additional pass-through methods on
FutureResultto their correspondingResultmethods:getErrorOrElse,getValueOrElse,getErrorOrElseAsync,getValueOrElseAsync - Updated examples and documentation to reflect the syntax updates.
- Underlying architecture now
uses Algebraic Data Type (ADT)
functionality introduced with class modifiers and patterns
in Dart 3.0.0 in May 2023.
-
2.3.205 Jan 2024 -
2.3.105 Jan 2024 -
2.3.005 Jan 2024Release notes
Open source →- Examples and documentation updates for the new syntax.
- Add to
FutureResult:andThen,errorCast,mapError,mapValue,withResult,withError,match,fold - Add
withErrorto Result andwithErrorandwithErrorAsynctoFutureResult
-
2.2.019 Apr 2023Nothing published for this version
-
2.1.018 Apr 2023Release notes
Open source →- Add pass through methods
withResultandwithResultAsyncon Result and Future extension method
- Add pass through methods
-
2.0.209 Oct 2022Release notes
Open source →- Add exception catching on
addThenandaddThenSuccessand FutureResult extension methods.
- Add exception catching on
-
2.0.109 Oct 2022 -
2.0.009 Oct 2022Release notes
Open source →- Allow nullable types for success and failure types
- Add
andThenSuccessandandThenSuccessAsyncmethods for allowing returning results without explicitResult.okwrapping to allow more concise syntax - Add extension methods on
FutureResultto make async chaining syntax much more concise - Add
errorCastmethod for when need to pass up an error Result with the same error type with different success type.
-
1.0.228 Nov 2021Release notes
Open source →- Tweaks to API documentation
- Added temp file "intermediate" level example and added it to
example.mdas well
-
1.0.127 Nov 2021 -
1.0.027 Nov 2021