Flutter Chopper не обрабатывает сообщения об ошибках

Я использую измельчитель в своем проекте флаттера вот так.

Класс AuthRestService:

import 'package:chopper/chopper.dart';
import 'package:flutter_meal_app/utils/constants.dart';
import 'package:injectable/injectable.dart';

part 'auth_rest_service.chopper.dart';

@prod
@singleton
@ChopperApi()
abstract class AuthRestService extends ChopperService {

  @Post(path: '/accounts:signUp?key={authKey}')
  Future<Response> signup(@Path('authKey') String authKey, @Body() Map<String, dynamic> body);

  @Post(path: '/accounts:signInWithPassword?key={authKey}')
  Future<Response> login(@Path('authKey') String authKey, @Body() Map<String, dynamic> body);

  @factoryMethod
  static AuthRestService create() {
    final client = ChopperClient(
        baseUrl: Constants.AUTH_BASE_URL,
        converter: JsonConverter(),
        services: [_$AuthRestService()],
        interceptors: [HttpLoggingInterceptor()]);

    return _$AuthRestService(client);
  }
}

Как я использую регистрационный звонок..

final response = await _authRestService.signup(AUTH_KEY,
          {'email': email, 'password': password, 'returnSecureToken': true});

Вот журнал веб-вызовов (как успешных, так и неудачных).

--> POST https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=yourauthkey
content-type: application/json; charset=utf-8
{"email":"palaksdarji@gmail.com","password":"123456","returnSecureToken":true}
--> END POST (78-byte body)

Success:
{
    "idToken":"....",
    ........
}

Failure:
<-- 400 https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=yourauthkey
cache-control: no-cache, no-store, max-age=0, must-revalidate
date: Sat, 17 Oct 2020 09:10:32 GMT
transfer-encoding: chunked
content-encoding: gzip
vary: Origin,X-Origin,Referer
content-type: application/json; charset=UTF-8
pragma: no-cache
x-xss-protection: 0
server: ESF
alt-svc: h3-Q050=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
expires: Mon, 01 Jan 1990 00:00:00 GMT

{
  "error": {
    "code": 400,
    "message": "EMAIL_EXISTS",
    "errors": [
      {
        "message": "EMAIL_EXISTS",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}
--> END POST

И ошибка, которую я получил в своих журналах:

error is Instance of 'Response<dynamic>'

Я использовал тот же тип RestService в своем проекте, который указывает на другой сервер, и он работает, этот AuthRestService является точной копией restservice для аутентификации firebase. Ошибка, которую я получил в своих журналах, связана с строкой, в которой мы вызываем API "подписки", что заставляет меня интересоваться моим ChopperClient.

Вы знаете, что происходит не так? Пожалуйста помоги. Благодарю.

1 ответ

Может быть, вы сможете разобрать такой ответ на ошибку

 Response response = await _authRestService.signup(AUTH_KEY,
          {'email': email, 'password': password, 'returnSecureToken': true});

  var res = SignUpResponse.fromJson(response.body);

SignUpResponse

part 'sign_up_response.g.dart';

@JsonSerializable()
class SignUpResponse extends BaseResponse {
  var error = new Error();
  SignUpResponse();

  factory SignUpResponse.fromJson(Map<String, dynamic> json) =>
      _$SignUpResponseFromJson(json);
  Map<String, dynamic> toJason() => _$SignUpResponseToJson(this);
}
Другие вопросы по тегам