Я пытаюсь достичь этой конечной точки при использовании флаттера. https://docs.particle.io/reference/device-cloud/api/#generate-an-access-token
Я работаю над POSTMAN и curl
curl version:
curl https://api.particle.io/oauth/token \
-u particle:particle \
-d grant_type=password \
-d "my.email@gmail.com" \
-d "my_password"
Почтальон:

Как на curl, так и на почтальоне, я получаю ответ с токеном доступа.
Но когда я пытаюсь реализовать это на Flutter, я получаю сообщение об ошибке. Вот мой код на флаттер.
Future<Response> getPublicKey() async {
LoginRequestModel requestModelBody = LoginRequestModel(grantType: "password",
username: "my.email@gmail.com", password: "my_password");
Map<String, dynamic> requestBody = requestModelBody.toJson();
String bodyString = json.encode(requestBody);
// String formBody = Uri.encodeQueryComponent(bodyString);
print("Body string: "+bodyString);
String url = "https://api.particle.io/oauth/token";
String credentials = "particle:particle";
Map<String, String> headers = {
HttpHeaders.contentTypeHeader: "application/x-www-form-urlencoded",
HttpHeaders.authorizationHeader: "Authorization $credentials",
};
return await post(url, headers: headers, body: bodyString);
}
Оператор печати, распечатывающий строку текста, выводит:
{"grant_type":"password","username":"my.email@gmail.com","password":"my.email@gmail.com"}
Это ошибка, которую я получаю обратно:
{"error":"invalid_request","error_description":"Invalid or missing grant_type parameter"}
Я предполагаю, что я неправильно использую кодировку формы, но я не могу понять, как правильно кодировать тело.
Вопрос: Как попасть в конечную точку REST, задокументированную здесь , используя флаттер?