getPlaceDetailFromId method

Future<Place> getPlaceDetailFromId(
  1. String placeId
)

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');
  }
}