searchV2 method

  1. @override
Future<List<PowerMapSearchResult>> searchV2(
  1. String query, {
  2. LatLng? proximity,
  3. int skip = 0,
  4. int take = 20,
  5. String lang = 'auto',
})
override

Implementation

@override
Future<List<PowerMapSearchResult>> searchV2(
  String query, {
  LatLng? proximity,
  int skip = 0,
  int take = 20,
  String lang = 'auto',
}) async {
  final baseUrl = PowerMapSDK.baseUrl;
  final Map<String, String> queryParams = {
    'q': query.trim(),
    'skip': skip.toString(),
    'take': take.toString(),
  };

  if (proximity != null) {
    queryParams['coor'] = '${proximity.latitude},${proximity.longitude}';
  }

  final uri = Uri.parse('$baseUrl$_geocodePath').replace(queryParameters: queryParams);

  try {
    final response = await http.get(
      uri,
      headers: await PowerMapSDK.getServiceHeaders(),
    );

    if (response.statusCode == 200) {
      final data = json.decode(response.body);
      final List<dynamic> list = data is List
          ? data
          : (data['hits'] ?? data['results'] ?? data['data'] ?? []);
      return list
          .map(
            (item) => PowerMapSearchResult.fromJson(
              item is Map<String, dynamic>
                  ? item
                  : Map<String, dynamic>.from(item as Map),
              lang: lang,
              query: query,
            ),
          )
          .toList();
    } else if (response.statusCode == 401 || response.statusCode == 403) {
      throw PowerMapException(
        code: PowerMapException.auth,
        message:
            'Authentication failed for geocode (searchV2) request. Please check your API keys.',
      );
    } else {
      throw PowerMapException(
        code: PowerMapException.serverError,
        message:
            'Geocode (searchV2) API returned error status: ${response.statusCode}',
        details: response.body,
      );
    }
  } catch (e) {
    if (e is PowerMapException) rethrow;
    throw PowerMapException(
      code: PowerMapException.network,
      message: 'Geocode (searchV2) request failed due to a network error.',
      details: e,
    );
  }
}