Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev2.0.0

either_option

A biblioteca simples para tratamento de erros com conceitos de programação funcional

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
570
Curtidas
42
Pontos Pub
150

Instalar pacote

flutter pub add either_option

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

Uma biblioteca leve em Dart inspirada na programação funcional, oferecendo o tipo `Either` para tratamento robusto de erros. Permite cálculos seguros representando resultados como um valor bem-sucedido (`Right`) ou um erro (`Left`). Essa abordagem ajuda a evitar exceções e promove uma gestão explícita de erros no código. A biblioteca é ideal para desenvolvedores que buscam fluxos de controle mais limpos e previsíveis em fluxos assíncronos e funcionais. Integra-se perfeitamente ao ecossistema do Dart e suporta todas as principais plataformas.

Casos de uso

  • Tratamento de erros em operações assíncronas
  • Processamento de dados em estilo funcional
  • Análise e validação seguras
  • Substituindo blocos try-catch
  • Compondo funções propensas a erros
  • Construindo lógica de negócios resiliente

Principais recursos

  • Fornece o tipo `Either<Left, Right>`
  • Suporta composição funcional
  • Imutável e seguro por tipo
  • Boilerplate mínimo
  • Funciona com async/await
  • Compatibilidade multiplataforma

Indicado para

  • Desenvolvedores usando padrões de programação funcional
  • Equipes que priorizam a segurança de erros
  • Projetos que exigem propagação limpa de erros
  • Desenvolvedores Dart evitando exceções
  • Aqueles que constroem lógica reutilizável e composicional
  • Aplicações que precisam de transições de estado previsíveis

Considerações

  • Requer entendimento de conceitos funcionais
  • Pode aumentar a curva de aprendizado para iniciantes
  • Não adequado para casos simples de erro
  • Limitado ao uso com tipos de erro explícitos
  • Melhor combinado com outras utilidades FP
  • Requer alinhamento de tipo cuidadoso em cadeias complexas

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

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

Categorias

Dependências

Lista de dependências 1 itens

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.