From a30273acba062928197ae40c46c0bea59b1c9739 Mon Sep 17 00:00:00 2001 From: Hadrien Lejard Date: Tue, 5 Sep 2017 22:00:12 +0200 Subject: [PATCH] query autocomplete --- README.md | 4 ++-- lib/src/places.dart | 30 ++++++++++++++++++++++++++++++ test/places_test.dart | 39 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 70 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 31569d8..e7f07bd 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ Google Maps Web Services [API](https://developers.google.com/maps/web-services) - [ ] add - [ ] delete - [ ] photo - - [ ] autocomplete - - [ ] queryautocomplete + - [x] autocomplete + - [x] queryautocomplete - [ ] [Directions](https://developers.google.com/maps/documentation/directions/) - [ ] [Distance Matrix](https://developers.google.com/maps/documentation/distance-matrix/) - [ ] [Geolocation](https://developers.google.com/maps/documentation/geolocation/intro) diff --git a/lib/src/places.dart b/lib/src/places.dart index 5d4bff2..6505252 100644 --- a/lib/src/places.dart +++ b/lib/src/places.dart @@ -11,6 +11,7 @@ const _nearbySearchUrl = "/nearbysearch/json"; const _textSearchUrl = "/textsearch/json"; const _detailsSearchUrl = "/details/json"; const _autocompleteUrl = "/autocomplete/json"; +const _queryAutocompleteUrl = "/queryautocomplete/json"; /// https://developers.google.com/places/web-service/ class GoogleMapsPlaces extends GoogleWebService { @@ -114,6 +115,17 @@ class GoogleMapsPlaces extends GoogleWebService { return _decodeAutocompleteResponse(await _doGet(url)); } + Future queryAutocomplete(String input, + {num offset, Location location, num radius, String language}) async { + final url = buildQueryAutocompleteUrl( + input: input, + location: location, + offset: offset, + radius: radius, + language: language); + return _decodeAutocompleteResponse(await _doGet(url)); + } + String buildNearbySearchUrl( {Location location, num radius, @@ -223,6 +235,24 @@ class GoogleMapsPlaces extends GoogleWebService { return "$url$_autocompleteUrl?${buildQuery(params)}"; } + String buildQueryAutocompleteUrl( + {String input, + num offset, + Location location, + num radius, + String language}) { + final params = { + "key": apiKey, + "input": input != null ? Uri.encodeComponent(input) : null, + "language": language, + "location": location, + "radius": radius, + "offset": offset + }; + + return "$url$_queryAutocompleteUrl?${buildQuery(params)}"; + } + Future _doGet(String url) => httpClient.get(url); PlacesSearchResponse _decodeSearchResponse(Response res) => new PlacesSearchResponse.fromJson(JSON.decode(res.body)); diff --git a/test/places_test.dart b/test/places_test.dart index 0162b1c..65a0e13 100644 --- a/test/places_test.dart +++ b/test/places_test.dart @@ -286,7 +286,44 @@ launch([Client client]) async { }); }); - group("queryautocomplete", () {}); + group("queryautocomplete", () { + test("basic", () { + expect( + places.buildQueryAutocompleteUrl(input: "Amoeba"), + equals( + "https://maps.googleapis.com/maps/api/place/queryautocomplete/json?key=$apiKey&input=Amoeba")); + }); + + test("with offset", () { + expect( + places.buildQueryAutocompleteUrl(input: "Amoeba", offset: 3), + equals( + "https://maps.googleapis.com/maps/api/place/queryautocomplete/json?key=$apiKey&input=Amoeba&offset=3")); + }); + + test("with location", () { + expect( + places.buildQueryAutocompleteUrl( + input: "Amoeba", + location: new Location(-33.8670522, 151.1957362)), + equals( + "https://maps.googleapis.com/maps/api/place/queryautocomplete/json?key=$apiKey&input=Amoeba&location=-33.8670522,151.1957362")); + }); + + test("with radius", () { + expect( + places.buildQueryAutocompleteUrl(input: "Amoeba", radius: 500), + equals( + "https://maps.googleapis.com/maps/api/place/queryautocomplete/json?key=$apiKey&input=Amoeba&radius=500")); + }); + + test("with language", () { + expect( + places.buildQueryAutocompleteUrl(input: "Amoeba", language: "fr"), + equals( + "https://maps.googleapis.com/maps/api/place/queryautocomplete/json?key=$apiKey&input=Amoeba&language=fr")); + }); + }); test("decode response", () { PlacesSearchResponse response =