Поэтому я пытаюсь вызвать REST API для входа здесь. Это в моем файле api_services.dart, где я вызываю все API для приложения.
api_services.dart
Future<User> loginUser(String email, String password)
async {
final response = await http.post(serverOauthUrl+'/token',
headers: {
HttpHeaders.AUTHORIZATION: "xxxx"
},
body: {
"email":"$email",
"password":"$password",
}
);
print(response.statusCode);
final responseJson = json.decode(response.body);
return new User.fromJson(responseJson);
}
И есть два способа, которыми я могу вызвать этот метод loginUser()
в своих файлах пользовательского интерфейса и получить ответ. Один использует метод then(), а другой использует FutureBuilder. Однако ни в одном из методов я не могу получить код состояния. Мой вариант использования заключается в том, что когда код состояния > 400, я создам виджет, который показывает сообщение об ошибке.
login_screen.dart
Код метода then():
_callLoginAPI(String email, String password){
loginUser(userName, password, "password").then((response) {
response.data.token;
// want my status code here as well along with response data
}
else
{
//todo show something on error
}
}, onError: (error) {
debugPrint(error.toString());
});
}
Или с помощью FutureBuilder:
return new FutureBuilder<User>(
future: loginUser(email, password),
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data.token);
} else if (snapshot.hasError) {
print(snapshot.error);
return new Text("${snapshot.error}");
}
return new CircularProgressIndicator();
},
);
Я хочу сделать что-то вроде этого
if(response.statusCode > 400)
return new Text("Error"):</code>