result_type 0.2.0 copy "result_type: ^0.2.0" to clipboard
result_type: ^0.2.0 copied to clipboard

Result Type for Dart.

Stand With Ukraine

Result Type for Dart

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

Content #

Features #

Result is a type that represents either Success or Failure.

Inspired by functional programming, Rust and Swift.

Requirements #

  • Dart: 2.17.3+

Install #

dependencies:
  result_type: ^0.2.0

Example #

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

import 'dart:async';
import 'dart:convert';
import 'dart:math';

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

void main() async {
  final random = Random();
  final client = http.Client();
  final result = await getPhotos(client);

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

  /// Apply transformation to successful operation results or handle an error.
  if (result.isSuccess) {
    final items = result.map((i) => i.where((j) => j.title.length > 60)).success;
    print('Number of Long Titles: ${items.length}');
  } else {
    print('Error: ${result.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, Error> getNextInteger() => Success(random.nextInt(4));
  Result<int, Error> 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 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.