Search packages, repositories and app categories

Package detailsv2.0.0

either_option

The simple library for Error Handling with functionnal programming concept

AndroidiOSWebmacOSWindowsLinux
30-day downloads
570
Likes
42
Pub points
150

Install package

flutter pub add either_option

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

A lightweight Dart library inspired by functional programming, offering the `Either` type for robust error handling. It enables safe computation by representing results as either a successful value (`Right`) or an error (`Left`). This approach helps avoid exceptions and promotes explicit error management in code. The library is ideal for developers seeking cleaner, more predictable control flow in asynchronous and functional workflows. It integrates seamlessly with Dart’s ecosystem and supports all major platforms.

Use cases

  • Error handling in async operations
  • Functional-style data processing
  • Safe parsing and validation
  • Replacing try-catch blocks
  • Composing error-prone functions
  • Building resilient business logic

Key features

  • Provides `Either<Left, Right>` type
  • Supports functional composition
  • Immutable and type-safe
  • Minimal boilerplate
  • Works with async/await
  • Cross-platform compatibility

Suitable for

  • Developers using functional programming patterns
  • Teams prioritizing error safety
  • Projects requiring clean error propagation
  • Dart developers avoiding exceptions
  • Those building reusable, composable logic
  • Applications needing predictable state transitions

Considerations

  • Requires understanding of functional concepts
  • May increase learning curve for beginners
  • Not suitable for simple error cases
  • Limited to use with explicit error types
  • Best paired with other FP utilities
  • Needs careful type alignment in complex chains

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

either_option

either_option is a simple library typed for easy and safe error handling with functional programming style in Dart. It aims to allow flutter/dart developpers to use the 2 most popular patterns and abstractions : Either and Option, mainly used in FP language like Scala, Haskell, OCaml,...

Installation

Prerelease versions that support null safety

Package link on pub either_option In your pubspec.yaml dependencies add

   either_option: ^2.0.0

Overview

Either

Either Represents a value of one of two possible types. By convention we put missing or error value in an instance of Left and expected success value in an instance of Right.

For example, we fetch an url from a repository repository to get an User details and use Either<ServerError,User> :

  Future<Either<ServerError, User>> getUser(int id) async {
    final baseUrl = "https://fakerestapi.azurewebsites.net/api/Users/$id";

    final res = await http.get(baseUrl);

    if (res.statusCode == 200) {
      dynamic body = json.decode(res.body);
      User user = User.fromJson(body);
      return Right(user);
    }
    if (res.statusCode == 404)
      return Left(ServerError("This user doesn't exist"));

    return Left(ServerError("Unknown server error"));
  }

So now to consume result we can use for example fold method and say what to do with value :

main() async {
  final Repository repository = Repository();

  final Either<ServerError, User> res = await repository.getUser(3);
  final defaultUser = User(id: 0, username: "ko", password: "ko");
  final userName = res.fold((_) => defaultUser.username, (user) => user.username);
  print(userName); // "User 3"
  
//if res was a Left, print(userName) would give "ko"
}

Option

Option Represents a value of one of two possible types. By convention we consider missing value as an instance of None and expected success value in an instance of Some.

  Future<Option<User>> getUserOpt(int id) async {
    final res = await http.get(baseUrl);
    return Option.cond(
        res.statusCode == 200, User.fromJson(json.decode(res.body)));
  }
  // -----------------------------------------
  main() async {
  final Repository repository = Repository();

  final Option<User> res = await repository.getUserOpt(3);
  final defaultUser = User(id: 0, username: "ko", password: "ko");
  final userName = res.getOrElse(defaultUser).username;
  print(userName); // "User 3"

  //if res was a None, print(userName) would give "ko"
}

Ressources & explanation

Medium article

Features

Functions available :

Option Either
fold :+1: :+1:
map :+1: :+1:
flatMap :+1: :+1:
getOrElse :+1:
orElse :+1:
toLeft :+1:
toRight :+1:
toEither :+1:
Option.empty :+1:
Option.of :+1:
filter :+1:
exists :+1:
contains :+1:
swap :+1:
cond :+1: :+1:

Example

Tests

Categories

Dependencies

Dependency list 1 items

Source repository

Projects using this package

No data available yet.