' 不是类型转换错误中“String”类型的子类型,json,flutter"/>

首页 > 解决方案 > 如何修复类型'_InternalLinkedHashMap' 不是类型转换错误中“String”类型的子类型

问题描述

我正在尝试进行异步 API 调用,并且不断收到此错误,我认为该错误是针对 body_y 的,但我不明白它在说什么或如何准确修复它。任何帮助表示赞赏

Future<void> _makePostRequest() async {
// set up POST request arguments
String url = 'https://myUrl';
//print(accessToken);
Map<String, String> headers = {"Authorization": "Bearer "+accessToken};

Map<String, String> body_y = {
    "contactName": {
"firstName": "abc",
"middleName": "def",
"lastName": "ff",
"type": "RETAIL",
"companyName": "Company",
"tradeName": "Merchant"
}
,
"notificationPreferences": [
{
"notificationHandleType": "EMAIL",
"notificationHandle": "b@beta.yahoo.ac"
}
],
"notificationLanguage": "EN" };
  
 

   // make POST request
    Response response = await post(url, headers: headers, body: body_y);
    // check the status code for the result
    int statusCode = response.statusCode;
    print(statusCode);
    // this API passes back the id of the new item added to the body
    String body = response.body;
  
  }

标签: jsonflutter

解决方案


body需要 aString但 aMap<String, String已通过。尝试编码为json.

import 'dart:convert`;

// Change from Map<String,String> to Map<String,dynamic>
Map<String, dynamic> body_y = {
  "contactName": {
    "firstName": "abc",
    "middleName": "def",
    "lastName": "ff",
    "type": "RETAIL",
    "companyName": "Company",
    "tradeName": "Merchant"
  },
  "notificationPreferences": [
    {
       "notificationHandleType": "EMAIL",
       "notificationHandle": "b@beta.yahoo.ac"
    } 
  ],
  "notificationLanguage": "EN",
};

Response response = await post(
  url, 
  headers: headers, 
  body: json.encode(body_y), // encode to json
);

var body = json.decode(response.body) as Map<String,dynamic>; // decode json to map

String id = body['id']; // if it's named 'id'

推荐阅读