Simple Result for Dart


I needed a simple Result like Swift's Result.

I have seen people using dartz with the Either type. But for me, thats not really clear and readable.

Other solutions like result and super_enum did not fit my needs neither. So here is my solution.

This packages uses the freezed package and adds some helper methods. Thank you for this great package!


Add the following to you pubspec.yaml and replace [version] with the latest version:

  simple_result: ^[version]

import with

import 'package:simple_result/simple_result.dart';


To create a Result use

Result<ValueType, FailureType>.success(value)


Result<ValueType, FailureType>.failure(failure)

You can then 'iterate' over success or failure with:

	success(value) {
		//doSomeThing with success value
	failure(failure) {
		//doSomeThing with failure

You can map the Result value type with map:

Result<User, Failure>.success(user);
final stringResult = result.mapSuccesss((user) => user.username);
// stringResult is of Type Result<String, Failure>

You can use convenience methods on a Result

final userResult = Result<User, Failure>.success(user);
userResult.isSuccess; // -> true
userResult.success; // -> user object.


import 'package:simple_result/simple_result.dart';
final mySuccessResult = Result<String,Failure>.success('success value');
final myErrorResult = Result<String,Failure>.failure(MyFailure());

mySuccessResult.isSuccess // -> true
mySuccessResult.success; // -> 'success value'

final myStringResult = mySuccessResult
		success:(value) => value.toString(), 
		failure:(_) => 'ERROR'); => 'StringResult'); // maps to Result<String, Failure>()

see more in example/main.dart


A simple result wrapper Use Result<ValueType, FailureType.success(value); or Result<ValueType, FailureType.failure(failure);