颤振 http.post 方法对我不起作用。每次我尝试运行它时,它都会弹出 ticker.dart


Future<LoginResponse> authenticate(LoginRequest request) async {
var url = _baseUrl + loginUrl;
Map<String, String> headers = {'Content-Type': 'application/json;'};
final res = await http.post(url, headers: headers, body: request.toJson());
if (res.statusCode == 201) {
Map<String, dynamic> response = jsonDecode(res.body);
var json = LoginResponse(res.statusCode,
response: response, token: response['user_access_token']['key']);
return json;
} else {
Map<String, dynamic> response = jsonDecode(res.body);
var json =
LoginResponse(res.statusCode, response: response, error: res.body);
return json;
}
}

这是我在UserRepository中的代码,我使用flutter_bloc来传递请求模型。

下面是AuthBloc中的逻辑。我很确定问题是在http.post方法中,因为当我删除标头时,我的请求被处理,但响应错误。

Stream<AuthState> _mapLoginToState(String email, String password) async* {
yield AuthenticationLoadingState();
LoginRequest request =
LoginRequest(email: email, password: password);
var res = await userRepository.authenticate(request);
if (res.code == 201) {
var token = res.token;
if (token != '' && token != null) {
await userRepository.saveToken(token);
yield AuthenticatedState();
} else {
await userRepository.deleteToken();
yield UnAuthenticatedState();
}
} else {
print(res.error);
}
}

我明白了。问题是我忘了把jsonEncode()包在body上。

我修复了这个问题,代码正常工作。

最新更新