Ваша проблема заключается в использовании аргумента http.post
и body
. Если вы читаете документацию, вы можете увидеть, что она описана как:
body устанавливает тело запроса. Это может быть строка, список или карта. Если это строка, она кодируется с использованием кодировки и используется в качестве тела запроса. Тип содержимого запроса по умолчанию будет "text / plain".
...
Если тело является Map, оно кодируется как поля формы с использованием кодировки. Тип содержимого запроса будет установлен на «application / x- www-form-urlencoded»; это не может быть отменено.
https://pub.dev/documentation/http/latest/http/post.html
Ввод body
, который вы задаете, исходит из следующего кода:
Map<String, dynamic> body = {
"name": name,
"email": email,
"password": password,
"birthday": DOB,
"gender": gender,
"location": location.toJson(),
"phone_number": mobile
};
Если тип даже не близок к Map<String, String>
, так как, например, location дается Map<String, dynamic>
как значение:
Map<String,dynamic> toJson() => {
"type": type,
"coordinates": List<double>.from(coordinates.map((x) => x)),
};
Кроме того, я не думаю, что вы хотите дать body
значение Карта в первую очередь. Как вы можете видеть в документации, упомянутой ранее, карты «кодируются как поля формы с использованием кодировки». Вместо этого вы хотите правильно разобрать карту на строку JSON и передать эту строку в качестве тела http.post
.
Поэтому вместо этого должно быть что-то вроде этого:
http.Response response = await http.post(url, headers: headers, body: json.encode(body));