From 2630d5a742ed58e06206fb8c711e92945e987761 Mon Sep 17 00:00:00 2001 From: Marco Trivisonno Date: Sun, 21 May 2023 11:54:44 +0200 Subject: [PATCH] fix: in web implementation session token is never used during the place autocomplete --- flutter_google_places_sdk_web/CHANGELOG.md | 4 ++ .../lib/flutter_google_places_sdk_web.dart | 41 +++++++++++++++---- flutter_google_places_sdk_web/pubspec.yaml | 2 +- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/flutter_google_places_sdk_web/CHANGELOG.md b/flutter_google_places_sdk_web/CHANGELOG.md index 224fc90..b220af2 100644 --- a/flutter_google_places_sdk_web/CHANGELOG.md +++ b/flutter_google_places_sdk_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.3+5 + +* Fix: session token is never used during the place autocomplete + ## 0.1.3+4 * Use formatted adrress instead of adr_address diff --git a/flutter_google_places_sdk_web/lib/flutter_google_places_sdk_web.dart b/flutter_google_places_sdk_web/lib/flutter_google_places_sdk_web.dart index 6a3165a..666d52b 100644 --- a/flutter_google_places_sdk_web/lib/flutter_google_places_sdk_web.dart +++ b/flutter_google_places_sdk_web/lib/flutter_google_places_sdk_web.dart @@ -100,6 +100,14 @@ class FlutterGooglePlacesSdkWebPlugin extends FlutterGooglePlacesSdkPlatform { return _completer?.isCompleted == true; } + AutocompleteSessionToken _getSessionToken({required bool force}) { + final localToken = _lastSessionToken; + if (force || localToken == null) { + return AutocompleteSessionToken(); + } + return localToken; + } + @override Future findAutocompletePredictions( String query, { @@ -116,13 +124,26 @@ class FlutterGooglePlacesSdkWebPlugin extends FlutterGooglePlacesSdkPlatform { // https://issuetracker.google.com/issues/36219203 log("locationRestriction is not supported: https://issuetracker.google.com/issues/36219203"); } - final prom = _svcAutoComplete!.getPlacePredictions(AutocompletionRequest() - ..input = query - ..origin = origin == null ? null : core.LatLng(origin.lat, origin.lng) - ..types = typeFilterStr == null ? null : [typeFilterStr] - ..componentRestrictions = (ComponentRestrictions()..country = countries) - ..bounds = _boundsToWeb(locationBias) - ..language = _language); + final sessionToken = _getSessionToken(force: newSessionToken == true); + final prom = _svcAutoComplete!.getPlacePredictions( + AutocompletionRequest() + ..input = query + ..origin = origin == null ? null : core.LatLng(origin.lat, origin.lng) + ..types = typeFilterStr == null ? null : [typeFilterStr] + ..componentRestrictions = (ComponentRestrictions()..country = countries) + ..bounds = _boundsToWeb(locationBias) + ..language = _language + ..sessionToken = sessionToken, + (results, status) { + if (status == PlacesServiceStatus.OK || + status == PlacesServiceStatus.ZERO_RESULTS || + status == PlacesServiceStatus.NOT_FOUND) { + _lastSessionToken = sessionToken; + } else { + log('API_ERROR: $status'); + } + }, + ); final resp = await prom; final predictions = resp.predictions @@ -169,10 +190,11 @@ class FlutterGooglePlacesSdkWebPlugin extends FlutterGooglePlacesSdkPlatform { List? fields, bool? newSessionToken, }) async { + final sessionToken = _getSessionToken(force: newSessionToken == true); final prom = _getDetails(PlaceDetailsRequest() ..placeId = placeId ..fields = fields?.map(this._mapField).toList(growable: false) - ..sessionToken = _lastSessionToken + ..sessionToken = sessionToken ..language = _language); final resp = await prom; @@ -243,7 +265,8 @@ class FlutterGooglePlacesSdkWebPlugin extends FlutterGooglePlacesSdkPlatform { ?.map(_parseAddressComponent) .cast() .toList(growable: false), - businessStatus: _parseBusinessStatus(getProperty(place, 'business_status')), + businessStatus: + _parseBusinessStatus(getProperty(place, 'business_status')), attributions: place.htmlAttributions?.cast(), latLng: _parseLatLang(place.geometry?.location), name: place.name, diff --git a/flutter_google_places_sdk_web/pubspec.yaml b/flutter_google_places_sdk_web/pubspec.yaml index 703cc1a..78f29ec 100644 --- a/flutter_google_places_sdk_web/pubspec.yaml +++ b/flutter_google_places_sdk_web/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_google_places_sdk_web description: The web implementation of Flutter plugin for google places sdk -version: 0.1.3+4 +version: 0.1.3+5 homepage: https://github.com/matanshukry/flutter_google_places_sdk/tree/master/flutter_google_places_sdk_web environment: