Как исправить тип _InternalLinkedHashMap 'не является подтипом типа' String 'в ошибке приведения типа - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь выполнить асинхронный вызов c 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;
  
  }

1 Ответ

1 голос
/ 01 августа 2020

body принимает String, но передается Map<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'
...