suggest method

Future<SuggestResponse> suggest({
  1. required String query,
  2. LatLng? biasPosition,
  3. SearchFilter? filter,
  4. int maxResults = 5,
  5. int? maxQueryRefinements,
  6. List<PlaceFeature> additionalFeatures = const <PlaceFeature>[],
  7. 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);
}