flutter_resultable
A lightweight, expressive Result
type for Flutter and Dart to model success and failure outcomes without using exceptions, inspired by functional programming patterns like Either
.
β¨ Features
- β
Result.success(S)
andResult.failure(F)
to represent outcomes cleanly. - π Pattern matching via
when
,map
, andmaybeWhen
(thanks tofreezed
). - β‘ Strongly typed failure and success handling.
- π§ Utility extensions:
isSuccess
,isFailure
successOrNull
,failureOrNull
getOrElse(fallback)
fold(onFailure, onSuccess)
- π‘ Easily testable and composable.
- πͺΆ Minimal, clean API.
π¦ Installation
Add this to your pubspec.yaml
:
dependencies:
flutter_resultable: ^0.0.3
Then run:
flutter pub get
π§ Usage
Define a result-returning function
import 'package:flutter_resultable/flutter_resultable.dart';
Result<String, int> divide(int a, int b) {
if (b == 0) return Result.failure("Division by zero");
return Result.success(a ~/ b);
}
Handle with pattern matching
final result = divide(10, 2);
result.when(
failure: (error) => print("Error: $error"),
success: (value) => print("Result: $value"),
);
Use maybeWhen
for optional handling
result.maybeWhen(
success: (value) => print("Success with $value"),
orElse: () => print("Something went wrong"),
);
Use fold
for cleaner branching
result.fold(
(error) => print("Error: $error"),
(value) => print("Value: $value"),
);
Use getOrElse
to provide a fallback value
final value = result.getOrElse((error) => -1); // returns 5 or -1
Check result state or access nullable values
if (result.isSuccess) {
print(result.successOrNull);
} else {
print(result.failureOrNull);
}
π API
sealed class Result<F, S> {
const factory Result.failure(F failure) = Failure<F, S>;
const factory Result.success(S success) = Success<F, S>;
}
Utility Extensions
Extension | Description |
---|---|
isSuccess |
Returns true if the result is success |
isFailure |
Returns true if the result is failure |
successOrNull |
Returns success value or null |
failureOrNull |
Returns failure value or null |
getOrElse |
Fallback mechanism based on failure value |
fold |
Branching on both success and failure cases |
π° Support
If you find this project helpful, consider sponsoring me on GitHub π
π Contributing
Contributions, ideas, and pull requests are welcome. Letβs make flutter_resultable
better together!
π Thanks
This package is powered by the amazing freezed
package.
Special thanks to Remi Rousselet and contributors for their work.
Without freezed
, clean and expressive sealed classes like Result
wouldn't be this simple β¨
π License
MIT License