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);
}