1

我在这样的颤振项目中使用斩波器。

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

这是webcall的日志(成功和失败)..

--> 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 是用于 firebase 身份验证的 restservice 的精确副本。我在日志中遇到的错误来自我们调用“注册”API 的那一行,这让我对我的 ChopperClient 感到好奇。

大家知道怎么回事吗??请帮忙。谢谢。

4

1 回答 1

0

也许你可以像这样解析错误响应

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

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

注册响应

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);
}
于 2020-10-17T10:00:00.563 回答