Result<T extends Object?, E extends Object> class
sealed
A type-safe way to handle operations that may fail.
Instead of throwing exceptions or returning null, Result represents either a successful value (Ok) or a failure (Err). This makes error handling explicit and composable.
Use Result when:
- You need explicit error handling
- You want to chain operations that might fail
- You need to distinguish between different error types
Example:
Result<int, String> safeDivide(int a, int b) {
if (b == 0) return Result.err('Cannot divide by zero');
return Result.ok(a ~/ b);
}
// Usage:
final result = safeDivide(10, 2);
final value = result.unwrapOr(0); // Get value or default
- Implementers
- Available extensions
- Annotations
-
- @immutable
Constructors
- Result.err(E error, [StackTrace? stackTrace])
-
Creates a failed result with the given
error.factory - Result.guardSync(T block())
-
Executes a synchronous function and wraps the result.
factory
- Result.ok(T value)
-
Creates a successful result with the given
value.constfactory
Properties
- err → E?
-
Returns the error value if this is an Err, otherwise null.
no setter
- hashCode → int
-
The hash code for this object.
no setterinherited
- isErr → bool
-
Returns true if this result is a failure (Err).
no setter
- isOk → bool
-
Returns true if this result is a success (Ok).
no setter
- ok → T?
-
Returns the success value if this is an Ok, otherwise null.
no setter
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
Methods
-
and(
Result< T, E> other) → Result<T, E> -
Chains operations: returns this result if it's an error, otherwise
other. -
andLazy(
Result< T, E> otherBlock()) → Result<T, E> -
Evaluates
otherBlockonly when this result is successful. -
andThen<
U extends Object?> (Result< U, E> otherBlock(T value)) → Result<U, E> - Transforms the success value into a new result, or propagates the error.
-
clone(
) → Result< T, E> - Returns a shallow copy of this result.
-
expect(
String message) → T -
Unwraps the success value, or throws an exception with
message. -
expectErr(
String message) → E -
Unwraps the error value, or throws an exception with
message. -
flatten(
) → Result< T, E> -
Available on Result<
Flattens a nested Result into a single Result.Result< , provided by the FlattenResultExtension extensionT, E> , E> -
inspectErr(
void block(E error)) → Result< T, E> -
Available on Result<
Executes a side effect if this is an error, then returns this unchanged.T, E> , provided by the InspectResultExtension extension -
inspectOk(
void block(T value)) → Result< T, E> -
Available on Result<
Executes a side effect if this is a success, then returns this unchanged.T, E> , provided by the InspectResultExtension extension -
isErrAnd(
bool predicate(E error)) → bool -
Checks if this is an error and the error matches the
predicate. -
isOkAnd(
bool predicate(T value)) → bool -
Checks if this is a success and the value matches the
predicate. -
map<
Y extends Object?> (Y block(T value)) → Result< Y, E> -
Transforms the success value using
block, leaving errors unchanged. -
mapErr<
F extends Object> (F block(E error)) → Result< T, F> -
Transforms the error value using
block, leaving success values unchanged. -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
or(
Result< T, E> other) → Result<T, E> -
Returns this result if it's a success, otherwise the already-evaluated
other. -
orElse<
F extends Object> (Result< T, F> otherBlock(E error, StackTrace st)) → Result<T, F> - Returns this success value, or computes a recovery result from the error.
-
orLazy(
Result< T, E> otherBlock()) → Result<T, E> -
Evaluates
otherBlockonly when this result is an error. -
toOption(
) → Option< T> - Converts this result into an Option.
-
toString(
) → String -
A string representation of this object.
inherited
-
unwrap(
) → T - Returns the success value, or throws the error with its original stack trace.
-
unwrapOr(
T defaultValue) → T -
Returns the success value, or
defaultValueif this is an error. -
unwrapOrElse(
T block(E error)) → T - Returns the success value, or computes a default from the error.
-
unwrapOrNull(
) → T? - Returns the success value as nullable, or null if this is an error.
Operators
-
operator &(
Result< T, E> other) → Result<T, E> - Combines two already-evaluated results using the and operator (&).
-
operator ==(
Object other) → bool -
The equality operator.
inherited
-
operator |(
Result< T, E> other) → Result<T, E> - Combines two already-evaluated results using the or operator (|).
Static Methods
-
guardAsync<
T extends Object?, E extends Object> (Future< T> asyncBlock()) → Future<Result< T, E> > - Executes an asynchronous function and wraps the result.
-
guardExceptionAsync<
T extends Object?, E extends Exception> (Future< T> asyncBlock()) → Future<Result< T, E> > - Executes an asynchronous function, catching only Exception types.
-
guardExceptionSync<
T extends Object?, E extends Exception> (T block()) → Result< T, E> - Executes a synchronous function, catching only Exception types.