suggest method
Future<SuggestResponse>
suggest({
- required String query,
- LatLng? biasPosition,
- SearchFilter? filter,
- int maxResults = 5,
- int? maxQueryRefinements,
- List<
PlaceFeature> additionalFeatures = const <PlaceFeature>[], - String? language,
Sugerencias mezcladas de sitios y de consultas. POST /v2/suggest.
Es más barata que autocomplete y devuelve dos cosas distintas en la misma lista: sitios concretos y consultas para refinar. Al escribir «restau» no hay un sitio que se llame así, hay una búsqueda que hacer, y esta operación lo dice explícitamente con SuggestResultType.query.
Para que las sugerencias de sitio traigan posición y dirección hay que
pedir PlaceFeature.core en additionalFeatures. Sin él llega solo el
título, que es lo que la hace barata.
maxQueryRefinements limita cuántas propuestas de reescritura vuelven.
Implementation
Future<SuggestResponse> suggest({
required String query,
LatLng? biasPosition,
SearchFilter? filter,
int maxResults = 5,
int? maxQueryRefinements,
List<PlaceFeature> additionalFeatures = const <PlaceFeature>[],
String? language,
}) async {
if (query.trim().isEmpty) return const SuggestResponse();
_checkFilter(filter, 'suggest');
final limit = _checkResults(maxResults, 1, 20, 'suggest');
final json = await _transport.postJson(
operation: 'Suggest',
service: _service,
path: '/v2/suggest',
body: <String, dynamic>{
'QueryText': query,
'MaxResults': limit,
'MaxQueryRefinements': ?maxQueryRefinements,
if (biasPosition != null) 'BiasPosition': biasPosition.toLonLat(),
if (filter != null && !filter.isEmpty) 'Filter': filter.toJson(),
if (additionalFeatures.isNotEmpty)
'AdditionalFeatures': additionalFeatures
.map((f) => f.wireName)
.toList(),
..._localeFields(language),
'IntendedUse': IntendedUse.singleUse.wireName,
},
);
return SuggestResponse.fromJson(json);
}