Это первый раз, когда я пытаюсь использовать HTTP Rest API с почтовым запросом, я пытаюсь использовать Google Route API для вычисления направления, я следую телу из документации Google, однако я продолжаю получать эту ошибку _CastError
Произошло исключение. _CastError (тип '_Map<String, Map<String, Map<String, double>>>' не является подтипом типа 'String' в приведении типа)
Это первый раз, когда я пытаюсь отправить запрос, поэтому я понятия не имею, что не так. вот код, который я использую
import 'dart:async';
import 'dart:ffi';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
import 'dart:convert' as convert;
class RouteAPI {
final String key = 'API_KEY_HERE';
Future<Void> getRoute() async {
final String Url =
'https://routes.googleapis.com/directions/v2:computeRoutes?KEY=$key';
var response = await http.post(Uri.parse(Url), body: {
"origin": {
"location": {
"latLng": {
"latitude": -6.2425120808113315,
"longitude": 106.85152720596324
}
},
},
"destination": {
"location": {
"latLng": {
"latitude": -6.2425120808113315,
"longitude": 106.85152720596324
}
},
},
"intermediates": {
"location": {
"latLng": {
"latitude": -6.178359098658539,
"longitude": 106.79219133887105
}
},
},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE",
"polylineQuality": "HIGH_QUALITY",
"polylineEncoding": "ENCODED_POLYLINE",
//"departureTime": "",
"computeAlternativeRoutes": "FALSE",
"routeModifiers": {
"avoidTolls": false,
"avoidHighways": false,
"avoidFerries": false
},
"languageCode": "en-US",
"units": "IMPERIAL"
});
var json = convert.jsonDecode(response.body);
print(json.toString());
return json;
}
}
Я попытался отправить тело сообщения, чтобы запросить закодированную полилинию из API маршрута Google.
Не включайте API-ключи непосредственно в свой проект, используйте переменные среды, как только кто-то получит ваш API-ключ, это может плохо закончиться большим долгом. Убедитесь, что вы сбросили ключ. flutter_dotenv.
Вам также необходимо включить свой ключ API в заголовок вашего запроса, из того, что я прочитал. Рассчитать маршрут документы
Вы получаете сообщение об ошибке типа, поскольку не кодируете свое тело JSON в строку.
convert.jsonEncode({"example": "example"})
Затем вы не устанавливаете заголовок типа контента, чтобы сообщить API, какие данные вы отправляете, и ключ API вместе с заголовком маски поля.
headers: {
"Content-Type": "application/json",
"X-Goog-Api-Key": "API_KEY",
"X-Goog-FieldMask": "routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline"};
Я заменил ваш раздел ответов для вас.
var response = await http.post(Uri.parse(url),
body: convert.jsonEncode({
"origin": {
"location": {
"latLng": {
"latitude": -6.2425120808113315,
"longitude": 106.85152720596324
}
},
},
"destination": {
"location": {
"latLng": {
"latitude": -6.2425120808113315,
"longitude": 106.85152720596324
}
},
},
"intermediates": {
"location": {
"latLng": {
"latitude": -6.178359098658539,
"longitude": 106.79219133887105
}
},
},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE",
"polylineQuality": "HIGH_QUALITY",
"polylineEncoding": "ENCODED_POLYLINE",
//"departureTime": "",
"computeAlternativeRoutes": "FALSE",
"routeModifiers": {
"avoidTolls": false,
"avoidHighways": false,
"avoidFerries": false
},
"languageCode": "en-US",
"units": "IMPERIAL"
}),
headers: {
"Content-Type": "application/json",
"X-Goog-Api-Key": "API_KEY",
"X-Goog-FieldMask": "routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline"
});