fluent_result
fluent_result is a lightweight Dart library developed to solve a common problem. It returns an object indicating success or failure of an operation instead of throwing/using exceptions.
Usage
Simple Non-Generic Result
Result result = Result.success();
Result result = Result.fail(ResultError('a fail reason'));
Result result = Result.withErrorMessage('a fail reason');
Result result = Result.withException(MyException('exception description'));
Generic Result
ResultOf<MyObject> result = ResultOf.success(MyObject());
MyObject value = result.value;
ResultOf<MyObject> result = ResultOf.fail<MyObject>(ResultError('a fail reason'));
MyObject value = result.value;
Result result = ResultOf.withErrorMessage<MyObject>('a fail reason');
Result result = ResultOf.withException(MyException<MyObject>('exception description'));
Converting Result to another
To convert one success result to another success result has to be provided a valueConverter
final anotherResult =
result.toResult(valueConverter: (customer) => User(customer.id));
To convert one fail result to another fail result
final anotherResult = failResult.toResult<Customer>();
Custom errors
To make your codebase more robust. Create your own error collection of the App by extending ResultError.
ResultError has key property which you can use for localization.
class InvalidPasswordError extends ResultError {
const InvalidPasswordError(String message)
: super(message, key: 'InvalidPasswordError');
}
class CustomerNotFound extends ResultError {
const CustomerNotFound({
required this.customerId,
}) : super('Customer not found with ID $customerId');
final int customerId;
@override
String toString() => message;
}
Collect errors
For example, easy to work with errors which comes from HTTP API.
final err1 = CustomerNotFound(customerId: 1);
final res = Result.fail(err1);
final err2 = InvalidPasswordError('The password 123456 is invalid');
res.add(err2);
res.contains<InvalidPasswordError>(); // true
res.get<InvalidPasswordError>().should.not.beNull();
Contributing
We accept the following contributions:
- Improving documentation
- Reporting issues
- Fixing bugs