Skip to content

Commit

Permalink
[compass_app] Standardize on Result factories rather than construct…
Browse files Browse the repository at this point in the history
…ors (#2538)

From my review of the recipes PR in
flutter/website#11444 (review).
  • Loading branch information
parlough authored Dec 5, 2024
1 parent 33701ce commit c3c93a8
Show file tree
Hide file tree
Showing 11 changed files with 26 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ class AuthRepositoryDev extends AuthRepository {
required String email,
required String password,
}) async {
return Result.ok(null);
return const Result.ok(null);
}

/// Logout is always successful in dev scenarios
@override
Future<Result<void>> logout() async {
return Result.ok(null);
return const Result.ok(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class BookingRepositoryLocal implements BookingRepository {
// Bookings created come without id, we need to assign one
final bookingWithId = booking.copyWith(id: _sequentialId++);
_bookings.add(bookingWithId);
return Result.ok(null);
return const Result.ok(null);
}

@override
Expand Down Expand Up @@ -92,6 +92,6 @@ class BookingRepositoryLocal implements BookingRepository {
@override
Future<Result<void>> delete(int id) async {
_bookings.removeWhere((booking) => booking.id == id);
return Result.ok(null);
return const Result.ok(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ class ItineraryConfigRepositoryMemory implements ItineraryConfigRepository {
ItineraryConfig itineraryConfig,
) async {
_itineraryConfig = itineraryConfig;
return Result.ok(true);
return const Result.ok(true);
}
}
18 changes: 9 additions & 9 deletions compass_app/app/lib/data/services/api/api_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class ApiClient {
return Result.ok(
json.map((element) => Continent.fromJson(element)).toList());
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -74,7 +74,7 @@ class ApiClient {
return Result.ok(
json.map((element) => Destination.fromJson(element)).toList());
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -97,7 +97,7 @@ class ApiClient {
json.map((element) => Activity.fromJson(element)).toList();
return Result.ok(activities);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -119,7 +119,7 @@ class ApiClient {
json.map((element) => BookingApiModel.fromJson(element)).toList();
return Result.ok(bookings);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -139,7 +139,7 @@ class ApiClient {
final booking = BookingApiModel.fromJson(jsonDecode(stringData));
return Result.ok(booking);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -160,7 +160,7 @@ class ApiClient {
final booking = BookingApiModel.fromJson(jsonDecode(stringData));
return Result.ok(booking);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -180,7 +180,7 @@ class ApiClient {
final user = UserApiModel.fromJson(jsonDecode(stringData));
return Result.ok(user);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand All @@ -197,9 +197,9 @@ class ApiClient {
final response = await request.close();
// Response 204 "No Content", delete was successful
if (response.statusCode == 204) {
return Result.ok(null);
return const Result.ok(null);
} else {
return Result.error(const HttpException("Invalid response"));
return const Result.error(HttpException("Invalid response"));
}
} on Exception catch (error) {
return Result.error(error);
Expand Down
2 changes: 1 addition & 1 deletion compass_app/app/lib/data/services/api/auth_api_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class AuthApiClient {
final stringData = await response.transform(utf8.decoder).join();
return Result.ok(LoginResponse.fromJson(jsonDecode(stringData)));
} else {
return Result.error(const HttpException("Login error"));
return const Result.error(HttpException("Login error"));
}
} on Exception catch (error) {
return Result.error(error);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class SharedPreferencesService {
_log.finer('Replaced token');
await sharedPreferences.setString(_tokenKey, token);
}
return Result.ok(null);
return const Result.ok(null);
} on Exception catch (e) {
_log.warning('Failed to set token', e);
return Result.error(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class BookingCreateUseCase {
case Ok<List<Destination>>():
final destination = result.value
.firstWhere((destination) => destination.ref == destinationRef);
return Ok(destination);
return Result.ok(destination);
case Error<List<Destination>>():
return Result.error(result.error);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class BookingShareUseCase {
try {
await _share(text);
_log.fine('Shared booking');
return Result.ok(null);
return const Result.ok(null);
} on Exception catch (error) {
_log.severe('Failed to share booking', error);
return Result.error(error);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class BookingViewModel extends ChangeNotifier {
_log.fine('Created Booking');
_booking = result.value;
notifyListeners();
return Result.ok(null);
return const Result.ok(null);
case Error<Booking>():
_log.warning('Booking error: ${result.error}');
notifyListeners();
Expand Down
12 changes: 6 additions & 6 deletions compass_app/app/lib/utils/result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
sealed class Result<T> {
const Result();

/// Creates an instance of Result containing a value
factory Result.ok(T value) => Ok(value);
/// Creates a successful [Result], completed with the specified [value].
const factory Result.ok(T value) = Ok._;

/// Create an instance of Result containing an error
factory Result.error(Exception error) => Error(error);
/// 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>;
Expand All @@ -33,7 +33,7 @@ sealed class Result<T> {

/// Subclass of Result for values
final class Ok<T> extends Result<T> {
const Ok(this.value);
const Ok._(this.value);

/// Returned value in result
final T value;
Expand All @@ -44,7 +44,7 @@ final class Ok<T> extends Result<T> {

/// Subclass of Result for errors
final class Error<T> extends Result<T> {
const Error(this.error);
const Error._(this.error);

/// Returned error in result
final Exception error;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class FakeAuthApiClient implements AuthApiClient {
@override
Future<Result<LoginResponse>> login(LoginRequest loginRequest) async {
if (loginRequest.email == 'EMAIL' && loginRequest.password == 'PASSWORD') {
return Result.ok(const LoginResponse(token: 'TOKEN', userId: '123'));
return const Result.ok(LoginResponse(token: 'TOKEN', userId: '123'));
}
return Result.error(Exception('ERROR!'));
}
Expand Down

0 comments on commit c3c93a8

Please sign in to comment.