kib_utils
A Dart utility package that provides a variety of tools.
Starting with the Result
class for representing operations that can either succeed or fail, providing functional error handling.
Features of Result
Result<S, E>
class withSuccess
andFailure
subclasses- Utility functions for working with results
- Extensions for asynchronous operations
- Type-safe error handling without exceptions
Getting started
dart pub add kib_utils
Or add to your pubspec.yaml
:
dependencies:
kib_utils: ^1.0.0
Usage of Result
Basic usage
import 'package:kib_utils/kib_utils.dart';
void main() {
// Create a success result
final success = Success<int, Exception>(42);
print(success.value); // 42
// Create a failure result
final failure = Failure<int, Exception>(Exception('Something went wrong'));
print(failure.error); // Exception: Something went wrong
// Using convenience functions
final successResult = success<String, Exception>('It worked!');
final failureResult = failure<String, Exception>(Exception('Oops!'));
}
Transforming results
import 'package:kib_utils/kib_utils.dart';
void main() {
final result = Success<int, Exception>(42);
// Map a success value
final mapped = result.map((value) => 'The answer is $value');
print(mapped.getOrThrow()); // The answer is 42
// Handle both cases with fold
final message = result.fold(
(value) => 'Success with value: $value',
(error) => 'Failed with error: $error',
);
print(message); // Success with value: 42
}
Working with asynchronous operations
import 'package:kib_utils/kib_utils.dart';
Future<void> main() async {
// Try an async operation
final result = await tryResultAsync<String, Exception>(
() async {
// Some async operation that might fail
return 'Data fetched successfully';
},
(error) => Exception('Failed to fetch data: $error'),
);
// Chain async operations
final fetchNumber = () async => Success<int, Exception>(10);
final processNumber = (int number) async =>
Success<String, Exception>('Processed number: $number');
final processedResult = await fetchNumber().flatMapAsync(processNumber);
print(processedResult.getOrThrow()); // Processed number: 10
}
Safe error handling
import 'package:kib_utils/kib_utils.dart';
void main() {
// Try a computation that might throw
final divideResult = tryResult<double, Exception>(
() => 10 / 0, // This will throw
(error) => Exception('Division error: $error'),
);
// Safe value extraction
final value = divideResult.getOrElse(0.0);
print(value); // 0.0
// Check result state
if (divideResult.isSuccess) {
print('Division succeeded with: ${divideResult.valueOrNull}');
} else if (divideResult.isFailure) {
print('Division failed with: ${divideResult.errorOrNull}');
}
}
Additional information
This package is meant to be a collection of essential utils. Feel free to contribute with issues, feature requests, and pull requests!
Libraries
- kib_utils
- A utility library providing various utils.