Почему я не могу сделать запрос API отдыха во Флаттере - PullRequest
2 голосов
/ 24 апреля 2020

Может кто-нибудь сказать мне, почему я получаю следующее исключение, когда я вызываю мой запрос POST:

Exception has occurred.
_CastError (type 'int' is not a subtype of type 'String' in type cast)

И он выдает на этой строке:

var response = await http.post(url, body:data);

Я использовал точку останова, чтобы проверить, верны ли приведенные данные, и выглядит ли он хорошо,

enter image description here

Я застрял в этой точке на много часов и Понятия не имею, что делать дальше: /

Функция API REST:

addEvent(String title, startDate, startTime, endDate, endTime, description, city, address, entryType, int freePlacesCount) async {
    Map data = {
      "title":title,
      "startDate":startDate,
      "startTime":startTime,
      "endDate":endDate,
      "endTime":endTime,
      "description":description,
      "city":city,
      "address":address,
      "entryType":entryType,
      "freePlacesCount":freePlacesCount,
      //"organizer":organizer
    };

    var jsonResponse;
    var url = 'http://10.0.2.2:80/party';
    var response = await http.post(url, body:data);

Кнопка:

      child: RaisedButton(
        onPressed: () {
          addEvent(
            sharedPreferences.getString('eventName'),
            sharedPreferences.getString('dateFrom'),
            sharedPreferences.getString('timeFrom'),
            sharedPreferences.getString('dateTo'),
            sharedPreferences.getString('timeTo'),
            descriptionText.text,
            sharedPreferences.getString('eventCity'),
            sharedPreferences.getString('eventAddress'),
            sharedPreferences.getString('eventType'),
            sharedPreferences.getInt('freePlaces')
          );
        },
      ),

1 Ответ

1 голос
/ 24 апреля 2020

Проблема в параметрах вашего тела. Вы можете установить только Map<String, String> для параметра body, в вашем случае это Map<String, dynamic>.

Согласно документации http post :

body устанавливает тело запроса. Это может быть String, List<int> или Map<String, String>

Чтобы исправить это, преобразуйте тип int в String:

Map<String,String> data = {
   "title":title,
   "startDate":startDate,
   "startTime":startTime,
   "endDate":endDate,
   "endTime":endTime,
   "description":description,
   "city":city,
   "address":address,
   "entryType":entryType,
   "freePlacesCount":freePlacesCount.toString(),
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...