Dart: как сделать запрос GET с телом - PullRequest
0 голосов
/ 20 июня 2020

Как отправить запрос GET с телом в дротике?

Я пробовал все рецепты из SO ( это и , и другие), но безуспешно.

final queryParameters = {
  "id": "6767676767676",
  "device": "tatatata",
  "user": {
    "login": "login",
    "password": "pwd",
  }
};

Это сложный JSON, и я получил ошибку при отправке запроса: final uri = Uri.http('44.44.444.444:8080', 'get-answer', queryParameters);

Exception: type '_InternalLinkedHashMap<String, Object>' is not a subtype of type 'Map<String, String>'

Ответы [ 4 ]

0 голосов
/ 20 июня 2020

Я советую вам использовать http-пакет , он идеально подходит для выполнения HTTP-запросов. перед отправкой данных убедитесь, что вы кодируете карту в формат json с помощью функции jsonEncode, а для получения данных из запроса GET декодируйте тело запроса из формата json с помощью функции jsonDecode.

  • Эти функции импортированы из пакета dart:convert
//import the packages
import 'package:http/http.dart' as http;
import 'dart:convert';

//other code here

final queryParameters = jsonEncode( {
"id": "6767676767676",
"device": "tatatata",
"login" : "login",
"password" : "password",
});

//we send the data to the server with the post method
await http.post("44.44.444.444:8080",queryParameters);

similarly for retrieving data:

final res = http.get("getUrl");

//if the request is successful we get the data
if(res.statusCode == 200)
    final data = jsonDecode(res.body);
0 голосов
/ 20 июня 2020

пробовали ли вы:

var response = await get(url);
var fetchedData = json.decode(response.body);

fetchedData будет в формате json карты

0 голосов
/ 20 июня 2020

Ответ - это то, что Flutter предлагает в этой части exception message:

'_ InternalLinkedHashMap 'не является подтипом типа' Карта '

Что это означает?

Это означает, что одна из ваших переменных равна '_InternalLinkedHashMap<String, Object>' и flutter хочет, чтобы вы изменили ее на 'Map<String, String>' введите

Вы должны сделать один из ваших ключей в queryParameters к этому 'Map<String, String>' введите

Как?

1. Импортируйте Dart Convert

, импортировав dart:convert, у нас будет jsonEncode method


    import 'dart:convert'; // put this at top of your file

2. Преобразовать вложенное значение в строку


    final nestedValue = {
        "login": "login",
        "password": "pwd",
      };

    String stringValue = jsonEncode(nestedValue); 

3. Верните его к своим основным параметрам


    final queryParameters = {
      "id": "6767676767676",
      "device": "tatatata",
      "user": stringValue
    };

    final uri = Uri.http('44.44.444.444:8080', 'get-answer', queryParameters);

Final Code

Это будет ваш окончательный код, как показано ниже:


    import 'dart:convert'; // put this at top of your file


    final nestedValue = {
        "login": "login",
        "password": "pwd",
      };

    String stringValue = jsonEncode(nestedValue); // add this

    final queryParameters = {
      "id": "6767676767676",
      "device": "tatatata",
      "user": stringValue
    };

    final uri = Uri.http('44.44.444.444:8080', 'get-answer', queryParameters);
0 голосов
/ 20 июня 2020

Думаю, ваш queryParameters не должен содержать объектов.

final queryParameters = {
    "id": "6767676767676",
    "device": "tatatata",
    "login" : "login",
    "password" : "password",
};
...