mirror of
https://github.com/flutter/samples.git
synced 2025-11-08 13:58:47 +00:00
From my review of the recipes PR in https://github.com/flutter/website/pull/11444#pullrequestreview-2480423811.
55 lines
1.3 KiB
Dart
55 lines
1.3 KiB
Dart
// Copyright 2024 The Flutter team. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
/// Utility class to wrap result data
|
|
///
|
|
/// Evaluate the result using a switch statement:
|
|
/// ```dart
|
|
/// switch (result) {
|
|
/// case Ok(): {
|
|
/// print(result.value);
|
|
/// }
|
|
/// case Error(): {
|
|
/// print(result.error);
|
|
/// }
|
|
/// }
|
|
/// ```
|
|
sealed class Result<T> {
|
|
const Result();
|
|
|
|
/// Creates a successful [Result], completed with the specified [value].
|
|
const factory Result.ok(T value) = Ok._;
|
|
|
|
/// Creates an error [Result], completed with the specified [error].
|
|
const factory Result.error(Exception error) = Error._;
|
|
|
|
/// Convenience method to cast to Ok
|
|
Ok<T> get asOk => this as Ok<T>;
|
|
|
|
/// Convenience method to cast to Error
|
|
Error get asError => this as Error<T>;
|
|
}
|
|
|
|
/// Subclass of Result for values
|
|
final class Ok<T> extends Result<T> {
|
|
const Ok._(this.value);
|
|
|
|
/// Returned value in result
|
|
final T value;
|
|
|
|
@override
|
|
String toString() => 'Result<$T>.ok($value)';
|
|
}
|
|
|
|
/// Subclass of Result for errors
|
|
final class Error<T> extends Result<T> {
|
|
const Error._(this.error);
|
|
|
|
/// Returned error in result
|
|
final Exception error;
|
|
|
|
@override
|
|
String toString() => 'Result<$T>.error($error)';
|
|
}
|