为什么我不能在 Flutter 中执行 rest api 请求

Why I can't do a rest api request in Flutter

有人能告诉我为什么在调用 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);

我已经用断点检查了给的数据是否正确,看起来没问题,

我在这一点上停留了好几个小时,不知道下一步该做什么:/

REST api 函数:

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')
          );
        },
      ),

问题出在您的 body 参数中。您只能将 Map<String, String> 设置为 body 参数,在您的情况下是 Map<String, dynamic>.

根据 http post 文档:

body sets the body of the request. It can be a String, a List<int> or a 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(),
};