@@ -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,
0 commit comments