Дарц: исключение в функции не пойман при попытке - PullRequest
1 голос
/ 23 января 2020

Я использую dartz с флаттером. Я хочу использовать любой из типов со всеми вызовами API, как предложено в этой статье

Ниже приведен способ переноса API в задачу

Future<Either<ApiException, SendOtpDto>> receiveOtp(
  String phoneNumber) async {
return Task<SendOtpDto>(() async {
  final String url = 'AuthenticationApi/sendOtp/$phoneNumber';
  final Map<String, dynamic> response = await apiWrapper.get(url);
  final SendOtpDto dto = SendOtpDto.fromJson(response);
  if (!dto.success) {
    throw ServerErrorException(dto.error); //Exception is thrown here
  }
  return dto;
}).attempt().mapLeftToFailure().run();
}

Я ожидаю attempt() должен поймать все броски как ApiException. В настоящее время выдает ошибку type 'Future<Either<ApiException, dynamic>>' is not a subtype of type 'FutureOr<Either<ApiException, SendOtpDto>>

Ниже показано, как я использую Api

if (event is GetOtpButtonPressed) {
  yield LoginApiLoading();
  final Either<ApiException, SendOtpDto> result = await apiManager.authentication(context).receiveOtp(event.username);
  yield result.fold<LoginState>(
  (ApiException exception) { return LoginFailure(error: exception.toString()); }, 
  (SendOtpDto dto) {  return LoginOtpSent(dto: dto);  });
}
...