getPlaceDetailFromId method
Implementation
Future<Place> getPlaceDetailFromId(String placeId) async {
// if you want to get the details of the selected place by place_id
final Map<String, dynamic> parameters = <String, dynamic>{
'place_id': placeId,
'fields': 'address_component,geometry',
'key': mapsApiKey,
'sessiontoken': sessionToken
};
final Uri request = Uri(
scheme: 'https',
host: 'maps.googleapis.com',
path: '/maps/api/place/details/json',
queryParameters: parameters);
print(request.toString());
final response = await client.get(request);
if (response.statusCode == 200) {
final result = json.decode(response.body);
if (result['status'] == 'OK') {
final components =
result['result']['address_components'] as List<dynamic>;
// build result
final place = Place();
place.lat = result['result']['geometry']['location']['lat'] as double;
place.lng = result['result']['geometry']['location']['lng'] as double;
components.forEach((c) {
final List type = c['types'];
if (type.contains('street_number')) {
place.streetNumber = c['long_name'];
}
if (type.contains('route')) {
place.street = c['long_name'];
}
if (type.contains('sublocality_level_1')) {
place.vicinity = c['long_name'];
}
if (type.contains('administrative_area_level_2')) {
place.city = c['long_name'];
}
if (type.contains('administrative_area_level_1')) {
place.state = c['long_name'];
}
if (type.contains('country')) {
place.country = c['long_name'];
}
if (type.contains('postal_code')) {
place.zipCode = c['long_name'];
}
});
return place;
}
throw Exception(result['error_message']);
} else {
throw Exception('Failed to fetch suggestion');
}
}