fetchPlaceDetailFromId function

Future<Address?> fetchPlaceDetailFromId(
  1. Client client,
  2. String apiKey,
  3. String placeId, {
  4. String? languageCode,
  5. String? sessionToken,
})

Implementation

Future<Address?> fetchPlaceDetailFromId(
  http.Client client,
  String apiKey,
  String placeId, {
  String? languageCode,
  String? sessionToken,
}) async {
  final queryParams = {
    if (languageCode != null) 'languageCode': languageCode,
    if (sessionToken != null) 'sessionToken': sessionToken,
  };
  String request = "$baseUrl/places/$placeId";
  var headers = {
    "X-Goog-Api-Key": apiKey,
    "X-Goog-FieldMask":
        "name,displayName,formattedAddress,addressComponents,shortFormattedAddress,location",
  };
  final response = await client.get(
    Uri.parse(request).replace(queryParameters: queryParams),
    headers: headers,
  );
  final result = jsonDecode(
    utf8.decode(response.bodyBytes, allowMalformed: true),
  );

  if (response.statusCode == 200) {
    return Address.fromJson(result);
  } else if (response.statusCode == 400 && result["error"] != null) {
    var exception = ApiException.fromJson(result);
    throw exception;
  } else {
    log.e("Failed fetching place $placeId", result["error"]["details"]);
    throw Exception('Failed to fetch place details for $placeId.');
  }
}