resource_result 1.0.1
resource_result: ^1.0.1 copied to clipboard
A package that provides a Resource class of any type. Supports the states Success, Failure and Loading.
example/example.dart
import 'package:resource_result/resource_result.dart';
main() {
final Resource<int> result = parseInt("13");
if (result.hasData) {
Text("Parsed int successfully: ${result.tryGetData}");
} else {
Text("Failed to parse int: ${result.tryGetMessage}");
}
//or
convert(someStream).listen((resource) {
resource.resolve(
onSuccess: (someClassData) => Text(
"Converted someClass to otherClass instance successfully: $someClassData"),
onLoading: (_) => Text("Loading..."),
onFailure: (error) => Text("Failed to convert: $error"));
});
}
void Text(String text) {}
class ParsingFailure extends Failure<int> {
ParsingFailure(String? message) : super(message);
}
Resource<int> parseInt(String value) {
try {
return Success(int.parse(value));
} catch (e) {
return ParsingFailure("Failed to parse value '$value'");
}
}
const Stream<SomeClass> someStream = Stream.empty();
class SomeClass {}
class OtherClass {}
class EmptyOtherClass implements OtherClass {}
OtherClass convertToSomeObject(SomeClass someClass) {
return OtherClass();
}
Stream<Resource<OtherClass>> convert(Stream<SomeClass> toConvert) async* {
yield Loading(EmptyOtherClass());
await for (final someObject in toConvert) {
try {
final OtherClass converted = convertToSomeObject(someObject);
yield Success(converted);
} catch (e) {
yield Failure("Failed convert '$someObject'");
}
}
}
class UserUnauthorizedFailure<U> extends Failure<U> {
UserUnauthorizedFailure(String? message) : super(message);
}
Failure failureWithMyAppError =
UserUnauthorizedFailure("User not authorized to access this resource");