Flutter Dio Cant делает POST-запросы - PullRequest
0 голосов
/ 10 марта 2020

Пытаюсь выполнить запрос POST в приложении Flutter с помощью плагина Dio. У меня есть следующий код, и я не знаю, почему он не работает. Он посылает пустые данные в мой API.

Код:

Future<String> sendRequest(String phone, int status) async {
String status = '';
print(sendConnectionUrl);
String bearerToken = await Endpoints.getBearerToken();

try {
  Response response = await Dio().post(
    'https://my.web.server/api',
    data: json.encode({ "mobile": phone, "status": status }),
    options: Options(
      headers: {
        'Accept': 'application/json',
        'Authorization': 'Bearer ' + bearerToken
      }
    )
  );

  // The code doesnt even get here, it goes straight to the catch
  print(response.toString());
  print('status: ' + response.statusCode.toString());
  var jsonData = json.decode(response.toString());
  if (jsonData['error'] == '0') {
    status = 'ok';
  }
  else {
    status = 'failed';
  }
}
catch (e) {
  print('exception: ' + e.toString());
  Future.error(e.toString());
}

return status;

}

Но отправка запроса в POSTMAN работает.

Пожалуйста, помогите. Спасибо!

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Попробуйте это:

Future<String> sendRequest(String phone, int status) async {
String status = '';
print(sendConnectionUrl);
String bearerToken = await Endpoints.getBearerToken();
Formdata form=FormData.fromMap({
"mobile": phone, "status": status
})

try {
  Response response = await Dio().post(
    'https://my.web.server/api',
    data: form,
    options: Options(
      headers: {
        'Accept': 'application/json',
        'Authorization': 'Bearer ' + bearerToken
      }
    )
  );

  // The code doesnt even get here, it goes straight to the catch
  print(response.toString());
  print('status: ' + response.statusCode.toString());
  var jsonData = json.decode(response.toString());
  if (jsonData['error'] == '0') {
    status = 'ok';
  }
  else {
    status = 'failed';
  }
}
catch (e) {
  print('exception: ' + e.toString());
  Future.error(e.toString());
}

return status;
0 голосов
/ 10 марта 2020

Это означает, что ваш сервер ожидает formData и отправляет данные с помощью data параметров. Насколько я знаю Dio не поддерживает formData. Чтобы решить эту проблему, вы должны либо изменить свой API в соответствии с этим требованием, либо использовать http пакет здесь

import 'package:http/http.dart' as http;

var url = 'https://example.com/whatsit/create';
var response = await http.post(url, body: {'name': 'doodle', 'color': 'blue'});
print('Response status: ${response.statusCode}');
print('Response body: ${response.body}');

print(await http.read('https://example.com/foobar.txt'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...