Skip to content

Commit b7fecf5

Browse files
committed
fix: in web implementation session token is never used during the place
autocomplete
1 parent 778b71d commit b7fecf5

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

flutter_google_places_sdk/lib/flutter_google_places_sdk.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,16 @@ class FlutterGooglePlacesSdk {
144144
/// Note that different fields can incur different billing.
145145
///
146146
/// For more info about billing: https://developers.google.com/maps/documentation/places/web-service/usage-and-billing
147-
Future<FetchPlaceResponse> fetchPlace(String placeId,
148-
{required List<PlaceField> fields}) {
149-
return _addMethodCall(() => platform.fetchPlace(placeId, fields: fields));
147+
Future<FetchPlaceResponse> fetchPlace(
148+
String placeId, {
149+
required List<PlaceField> fields,
150+
bool? newSessionToken,
151+
}) {
152+
return _addMethodCall(() => platform.fetchPlace(
153+
placeId,
154+
fields: fields,
155+
newSessionToken: newSessionToken,
156+
));
150157
}
151158

152159
/// Fetches a photo of a place.

flutter_google_places_sdk_web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.1.3+5
2+
3+
* Fix: session token is never used during the place autocomplete
4+
15
## 0.1.3+4
26

37
* Use formatted adrress instead of adr_address

flutter_google_places_sdk_web/lib/flutter_google_places_sdk_web.dart

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ class FlutterGooglePlacesSdkWebPlugin extends FlutterGooglePlacesSdkPlatform {
100100
return _completer?.isCompleted == true;
101101
}
102102

103+
AutocompleteSessionToken _getSessionToken({required bool force}) {
104+
final localToken = _lastSessionToken;
105+
if (force || localToken == null) {
106+
return AutocompleteSessionToken();
107+
}
108+
return localToken;
109+
}
110+
103111
@override
104112
Future<FindAutocompletePredictionsResponse> findAutocompletePredictions(
105113
String query, {
@@ -116,13 +124,26 @@ class FlutterGooglePlacesSdkWebPlugin extends FlutterGooglePlacesSdkPlatform {
116124
// https://issuetracker.google.com/issues/36219203
117125
log("locationRestriction is not supported: https://issuetracker.google.com/issues/36219203");
118126
}
119-
final prom = _svcAutoComplete!.getPlacePredictions(AutocompletionRequest()
120-
..input = query
121-
..origin = origin == null ? null : core.LatLng(origin.lat, origin.lng)
122-
..types = typeFilterStr == null ? null : [typeFilterStr]
123-
..componentRestrictions = (ComponentRestrictions()..country = countries)
124-
..bounds = _boundsToWeb(locationBias)
125-
..language = _language);
127+
final sessionToken = _getSessionToken(force: newSessionToken == true);
128+
final prom = _svcAutoComplete!.getPlacePredictions(
129+
AutocompletionRequest()
130+
..input = query
131+
..origin = origin == null ? null : core.LatLng(origin.lat, origin.lng)
132+
..types = typeFilterStr == null ? null : [typeFilterStr]
133+
..componentRestrictions = (ComponentRestrictions()..country = countries)
134+
..bounds = _boundsToWeb(locationBias)
135+
..language = _language
136+
..sessionToken = sessionToken,
137+
(results, status) {
138+
if (status == PlacesServiceStatus.OK ||
139+
status == PlacesServiceStatus.ZERO_RESULTS ||
140+
status == PlacesServiceStatus.NOT_FOUND) {
141+
_lastSessionToken = sessionToken;
142+
} else {
143+
log('API_ERROR: $status');
144+
}
145+
},
146+
);
126147
final resp = await prom;
127148

128149
final predictions = resp.predictions
@@ -169,10 +190,11 @@ class FlutterGooglePlacesSdkWebPlugin extends FlutterGooglePlacesSdkPlatform {
169190
List<PlaceField>? fields,
170191
bool? newSessionToken,
171192
}) async {
193+
final sessionToken = _getSessionToken(force: newSessionToken == true);
172194
final prom = _getDetails(PlaceDetailsRequest()
173195
..placeId = placeId
174196
..fields = fields?.map(this._mapField).toList(growable: false)
175-
..sessionToken = _lastSessionToken
197+
..sessionToken = sessionToken
176198
..language = _language);
177199

178200
final resp = await prom;
@@ -243,7 +265,8 @@ class FlutterGooglePlacesSdkWebPlugin extends FlutterGooglePlacesSdkPlatform {
243265
?.map(_parseAddressComponent)
244266
.cast<AddressComponent>()
245267
.toList(growable: false),
246-
businessStatus: _parseBusinessStatus(getProperty(place, 'business_status')),
268+
businessStatus:
269+
_parseBusinessStatus(getProperty(place, 'business_status')),
247270
attributions: place.htmlAttributions?.cast<String>(),
248271
latLng: _parseLatLang(place.geometry?.location),
249272
name: place.name,

flutter_google_places_sdk_web/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: flutter_google_places_sdk_web
22
description: The web implementation of Flutter plugin for google places sdk
3-
version: 0.1.3+4
3+
version: 0.1.3+5
44
homepage: https://github.com/matanshukry/flutter_google_places_sdk/tree/master/flutter_google_places_sdk_web
55

66
environment:

0 commit comments

Comments
 (0)