类型';int';不是类型为';字符串';发送post请求时的类型转换

类型';int';不是类型为';字符串';发送post请求时的类型转换,post,flutter,http-post,Post,Flutter,Http Post,我在发送post请求时出现了一个奇怪的错误 // this map is passed to a function final Map<String, dynamic> activityData = { "userId": 1, "name": activityName.text, "description": activityDescription.text, "startAt": activityStartAt.text, "endsAt": activity

我在发送post请求时出现了一个奇怪的错误

// this map is passed to a function
final Map<String, dynamic> activityData = {
  "userId": 1,
  "name": activityName.text,
  "description": activityDescription.text,
  "startAt": activityStartAt.text,
  "endsAt": activityEndAt.text,
  "lat": _latitude,
  "long": _longitude,
  "category": 2,
  "status": "pending"
};

// this code bellow is inside a async function
final http.Response response =
        await http.post(Uri.encodeFull(url), body: activityData);
//此映射被传递给函数
最终地图活动数据={
“用户ID”:1,
“名称”:activityName.text,
“描述”:activityDescription.text,
“startAt”:activityStartAt.text,
“endsAt”:activityEndAt.text,
“纬度”:,
“长”:(经度),
“类别”:2,
“状态”:“待定”
};
//下面的代码在异步函数中
最终http.Response响应=
等待http.post(Uri.encodeFull(url),主体:activityData);
这就是错误:

E/flutter (32582): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter (32582): type 'int' is not a subtype of type 'String' in type cast
E/flutter (32582): #0      CastMap.forEach.<anonymous closure> (dart:_internal/cast.dart:286:25)
E/flutter (32582): #1      __InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin.forEach (dart:collection/runtime/libcompact_hash.dart:370:8)
E/flutter (32582): #2      CastMap.forEach (dart:_internal/cast.dart:285:13)
E/flutter (32582): #3      mapToQuery (package:http/src/utils.dart:17:7)
E/flutter (32582): #4      Request.bodyFields= (package:http/src/request.dart:128:17)
E/flutter (32582): #5      BaseClient._sendUnstreamed (package:http/src/base_client.dart:163:17)
E/flutter (32582): <asynchronous suspension>
E/flutter (32582): #6      BaseClient.post (package:http/src/base_client.dart:54:7)
E/flutter (32582): #7      post.<anonymous closure> (package:http/http.dart:70:16)
E/flutter (32582): #8      _withClient (package:http/http.dart:166:20)
E/flutter (32582): <asynchronous suspension>
E/flutter (32582): #9      post (package:http/http.dart:69:5)
E/flutter (32582): #10     _MainModel&Model&ConnectedModel&UsersModel&ActivitiesModel.createActivity (package:activmap/scoped-models/connectedModel.dart:62:15)
E/flutter (32582): <asynchronous suspension>
E/flutter (32582): #11     _NewActivityState.save (package:activmap/pages/newActivity.dart:271:11)
E/flutter (32582): <asynchronous suspension>
E/flutter (32582): #12     _NewActivityState.build.<anonymous closure> (package:activmap/pages/newActivity.dart:248:30)
E/flutter (32582): #13     _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter (32582): #14     _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter (32582): #15     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter (32582): #16     TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter (32582): #17     TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
E/flutter (32582): #18     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)
E/flutter (32582): #19     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
E/flutter (32582): #20     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
E/flutter (32582): #21     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19)
E/flutter (32582): #22     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
E/flutter (32582): #23     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
E/flutter (32582): #24     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
E/flutter (32582): #25     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
E/flutter (32582): #26     _invoke1 (dart:ui/hooks.dart:168:13)
E/flutter (32582): #27     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)
E/flatter(32582):[错误:flatter/shell/common/shell.cc(184)]省道错误:未处理的异常:
E/flatter(32582):类型“int”不是类型转换中类型“String”的子类型
E/颤振(32582):#0 CastMap.forEach。(省道:内部/铸造省道:286:25)
E/flatter(32582):#1#内部LinkedHashMap和"HashVMBase和"MapMixin和"LinkedHashMapMixin.forEach(dart:collection/runtime/libcompact"散列:370:8)
E/颤振(32582):#2卡斯特地图。弗雷赫(省道:内部/铸造省道:285:13)
E/flatter(32582):#3映射查询(包:http/src/utils.dart:17:7)
E/flatter(32582):#4 Request.bodyFields=(包:http/src/Request.dart:128:17)
E/flatter(32582):#5 BaseClient._sendUnstreamed(包:http/src/base_client.dart:163:17)
E/颤振(32582):
E/flatter(32582):#6 BaseClient.post(包:http/src/base_client.dart:54:7)
E/颤振(32582):#7个员额。(包:http/http.dart:70:16)
E/flatter(32582):#8 34;与客户端(包:http/http.dart:166:20)
E/颤振(32582):
E/Flatter(32582):#9篇文章(文件包:http/http.dart:69:5)
E/flatter(32582):#10#main Model&Model&ConnectedModel&users Model&ActivitiesModel.createActivity(包:activivmap/scoped models/ConnectedModel.dart:62:15)
E/颤振(32582):
E/flatter(32582):#11_NewActivityState.save(包:activmap/pages/newActivity.dart:271:11)
E/颤振(32582):
E/flatter(32582):#12_NewActivityState.build。(软件包:activmap/pages/newActivity.dart:248:30)
E/颤振(32582):#13(InkResponse Estate.)(handleTap)(包装:颤振/src/材料/墨水(well.省道:507:14)
E/颤振(32582):#14#InkResponseEstate.build。(包装:颤振/src/材料/墨水井。省道:562:30)
E/flatter(32582):#15手势识别器.invokeCallback(包:flatter/src/signatures/recognizer.dart:102:24)
E/颤振(32582):#16拍击动作识别器。#检查(包装:颤振/src/手势/tap.dart:242:9)
E/flatter(32582):#17 TapGestureRecognitor.handlePrimaryPointer(包:flatter/src/signatures/tap.dart:175:7)
E/颤振(32582):#18 PrimaryPointerEstureRecognizer.handleEvent(包:颤振/src/手势/识别器。省道:315:9)
E/flatter(32582):#19点外部程序。#调度(包:flatter/src/signatures/pointer#u路由器。dart:73:12)
E/flatter(32582):#20 PointerRouter.route(包:flatter/src/signatures/pointer_router.dart:101:11)
电子/颤振(32582):WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent(软件包:颤振/src/signatures/binding.dart:180:19)
E/flatter(32582):22_WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent(包:flatter/src/signatures/binding.dart:158:22)
电子/颤振(32582):#23#WidgetsFlutterBinding&BindingBase&GestureBinding.#手持指针事件(包装:颤振/src/手势/绑定。省道:138:7)
电子/颤振(32582):#24#WidgetsFlutterBinding&BindingBase&GestureBinding.#flushPointerEventQueue(包装:颤振/src/手势/binding.省道:101:7)
电子/颤振(32582):#25#WidgetsFlutterBinding&BindingBase&GestureBinding.#HandlePointerData数据包(数据包:颤振/src/手势/绑定。省道:85:7)
E/颤振(32582):#26 _调用1(省道:ui/挂钩。省道:168:13)
E/flatter(32582):#27 dispatchPointerDataPacket(dart:ui/hooks.dart:122:5)

我可以在另一个屏幕上正常工作。我能看到的唯一区别是,正在工作的屏幕只有字符串,而这个屏幕有int、double和String。

要解决您的问题,您只需在发送之前对数据进行编码

 import 'dart:convert';
 ...

 final http.Response response =
    await http.post(Uri.encodeFull(url), body: json.encode(activityData));
如果您的API不支持JSON,那么您只需将所有数据作为字符串传递

    final Map<String, dynamic> activityData = {
      "user_id": "1",
      "name": activityName.text,
      "description": activityDescription.text,
      "startAt": activityStartAt.text,
      "endsAt": activityEndAt.text,
      "lat": "$_latitude",
      "long": "$_longitude",
      "category": "2",
      "status": "pending"
    };

     final http.Response response =
    await http.post(Uri.encodeFull(url), body: activityData);
最终地图活动数据={
“用户id”:“1”,
“名称”:activityName.text,
“描述”:activityDescription.text,
“startAt”:activityStartAt.text,
“endsAt”:activityEndAt.text,
“纬度”:“$_纬度”,
“长”:“$\u经度”,
“类别”:“2”,
“状态”:“待定”
};
最终http.Response响应=
等待http.post(Uri.encodeFull(url),主体:activityData);
签出-用于发出http请求的颤振库(受python请求模块的启发)

发布
应用程序/x-www-form-urlencoded

var r = await Requests.post(
  "https://reqres.in/api/users", body: {
    "userId": 10,
    "id": 91,
    "title": "aut amet sed",
  },
  bodyEncoding: RequestBodyEncoding.FormURLEncoded);

r.raiseForStatus();
dynamic json = r.json();
print(json['id']);
var r = await Requests.post("https://reqres.in/api/users", json: {
    "userId": 10,
    "id": 91,
    "title": "aut amet sed",
    "body": "libero voluptate eveniet aperiam sed\nsunt placeat suscipit molestias\nsimilique fugit nam natus\nexpedita consequatur consequatur dolores quia eos et placeat",
  });

r.raiseForStatus();
dynamic body = r.json();
print(json['id']);
发布
应用程序/json

var r = await Requests.post(
  "https://reqres.in/api/users", body: {
    "userId": 10,
    "id": 91,
    "title": "aut amet sed",
  },
  bodyEncoding: RequestBodyEncoding.FormURLEncoded);

r.raiseForStatus();
dynamic json = r.json();
print(json['id']);
var r = await Requests.post("https://reqres.in/api/users", json: {
    "userId": 10,
    "id": 91,
    "title": "aut amet sed",
    "body": "libero voluptate eveniet aperiam sed\nsunt placeat suscipit molestias\nsimilique fugit nam natus\nexpedita consequatur consequatur dolores quia eos et placeat",
  });

r.raiseForStatus();
dynamic body = r.json();
print(json['id']);
步骤1:在标题中使用
“内容类型”:“application/json”

第二步:把你的身体编码成
jsonEncode({“param1”:10,“param2”:20,“param3”:“abc”,“param4”:true})

示例代码如下

 headers: {
      "content-type": "application/json",
    },
    body:jsonEncode( {
      "qualificationId": 10,
      "year":2001,
      "instituteName": "example",
      "isActive": true
    })

错误的底线是什么/连接模型。省道:62你能加上吗line@diegoveloper这是一行
final http.Response-Response=wait http.post(Uri.encodeFull(url),body:activityData)
并且当我打印(activityData)时,它也会正确打印。@diegoveloper在我得到响应后,我检查
如果(response.statusCode!=201){}否则{//我转到另一页}
@diegoveloper ok!这是url:@diegoveloper这是一个要点,所以你可以看到我已经打印的代码,它是正确的。问题是我的API不读取json,最好不用编码就可以使用它。正如我提到的,在另一个函数中不用json.encode也可以正常工作!!!我之前用.toString()和“1”尝试过,但没有成功,现在成功了!!谢谢,你认为这个错误应该报告还是应该报告