searchV2 method
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,
);
}
}