Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev1.0.0

result_type

Tipo de resultado para Dart.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
4,9 mil
Curtidas
35
Pontos Pub
150

Instalar pacote

flutter pub add result_type

Visão geral do pacote

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

Result Type é um pacote Dart que oferece uma maneira robusta e tipada para lidar com operações que podem ter sucesso com um valor ou falhar com um erro. Inspirado em conceitos de programação funcional, introduz a classe `Result<T, E>` para representar resultados de cálculos, tornando o tratamento de erros mais explícito e reduzindo a necessidade de exceções. Suporta encadeamento, mapeamento e propagação de erros, melhorando a legibilidade e manutenibilidade do código. Ideal para lógica de negócios e fluxos de processamento de dados onde estados claros de sucesso/falha são essenciais.

Casos de uso

  • Manipulação de respostas da API
  • Processamento de validação de entrada do usuário
  • Gerenciando operações assíncronas
  • Implementando lógica de negócios com erros explícitos
  • Substituindo blocos try-catch por fluxo estruturado

Principais recursos

  • Tipos seguros de sucesso e erro
  • Métodos de encadeamento e transformação
  • Propagação de erro embutida
  • Tratamento de resultado componível
  • Boilerplate mínimo

Indicado para

  • Desenvolvedores usando padrões funcionais no Dart
  • Projetos que exigem tratamento claro de erros
  • Equipes visando gerenciamento de estado previsível
  • Aplicações com fluxos de dados complexos
  • Aqueles que buscam alternativas às exceções para fluxo de controle

Considerações

  • Requer aprendizado de novo padrão se não estiver familiar com tipos Result
  • Pode aumentar a verbosidade em casos simples
  • Não adequado para erros de sistema de baixo nível
  • Integração limitada com algumas bibliotecas existentes baseadas em exceções
  • Melhor usado em conjunto com práticas de segurança nula

README original

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

Result Type for Dart

CI Status Result Type is released under the MIT license. PRs welcome!

Content

Features

Result is a type that represents either Success or Failure.

Inspired by functional programming, Rust and Swift.

Requirements

  • Dart: 3.3.0+

Install

dependencies:
  result_type: ^1.0.0

Example

The detailed example can be found at result_type/example/example.dart.

import 'dart:math';

import 'package:http/http.dart' as http;
import 'package:result_type/src/result.dart';

import 'imaginary_service.dart';
import 'photo.dart';
import 'photos_service.dart';

final client = http.Client();
final random = Random();

void main() async {
  final photosResult = await PhotosService.getPhotos(client);

  final photosOr = photosResult.unwrapOr([Photo.initial()]);

  print(photosOr);

  /// Use `switch` to handle both success and failure.
  final _ = switch (photosResult) {
    Success(value: final data) => data,
    Failure(value: final error) => 'Error: $error'
  };

  /// Do something with successful operation results or handle an error.
  if (photosResult.isSuccess) {
    print('Photos Items: ${photosResult.success}');
  } else {
    print('Error: ${photosResult.failure}');
  }

  // Chain multiple asynchronous operations.
  final result1 = await ImaginaryService.fetchData1();
  final result2 = await ImaginaryService.fetchData2(result1.success);
  final result3 = await ImaginaryService.fetchData2(result2.success);

  // Print the result of the last operation: `Success: Default Data`
  print(result3.unwrapOr('Default Data'));

  // This will throw an exception as `_handleResult`
  // has a case with 'Wrong Data'.
  //print(result3.unwrap());

  String length(String string) => string.length.toString();

  final unwrapOrElse = result3.unwrapOrElse('Default (((((Data)))))', length);
  // Print the result of the last operation: `22`
  print(unwrapOrElse);

  /// Apply transformation to successful operation results or handle an error.
  if (photosResult.isSuccess) {
    final items = photosResult
        .map(
          (i) => i.where(
            (j) => j.title.length > 60,
          ),
        )
        .success;
    print('Number of Long Titles: ${items.length}');
  } else {
    print('Error: ${photosResult.failure}');
  }

  /// In this example, note the difference in the result of using `map` and
  /// `flatMap` with a transformation that returns an result type.
  Result<int, Exception> getNextInteger() => Success(random.nextInt(4));
  Result<int, Exception> getNextAfterInteger(int n) =>
      Success(random.nextInt(n + 1));

  final nextIntegerNestedResults = getNextInteger().map(getNextAfterInteger);
  print(nextIntegerNestedResults.runtimeType);
  // Prints: Success<Result<int, Error>, dynamic>

  final nextIntegerUnboxedResults =
      getNextInteger().flatMap(getNextAfterInteger);
  print(nextIntegerUnboxedResults.runtimeType);
  // Prints: Success<int, Error>

  /// Use completion handler / callback style API if you want to.
  await PhotosService.getPhotos(client)
    ..result((photos) {
      // print('Photos: $photos');
    }, (error) {
      print('Error: $error');
    });
}

To see examples of the following package in action:

cd example && dart run

Support

Post issues and feature requests on the GitHub issue tracker.

License

The source code is distributed under the MIT license. See the LICENSE file for more info.

Categorias

Dependências

Lista de dependências 1 itens

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.