search method
Performs a search across Spotify content.
query is the search term, types define content types (e.g. track, artist),
optional market, pagination via limit and offset.
Implementation
Future<Map<String, List<dynamic>>> search({
required String query,
required List<String> types,
String? market,
int limit = 20,
int offset = 0,
}) async {
final typeParam = types.join(',');
final queryParams = {
'q': query,
'type': typeParam,
'limit': limit.toString(),
'offset': offset.toString(),
if (market != null) 'market': market,
};
final url = Uri.https(_baseApiHost, '/v1/search', queryParams);
final jsonResponse = await _getJson(url);
final Map<String, List<dynamic>> results = {};
for (final type in types) {
final key = '${type}s';
if (!jsonResponse.containsKey(key)) continue;
final items = jsonResponse[key]['items'] as List<dynamic>;
results[key] = switch (type) {
'track' => items.map((item) => Track.fromJson(item)).toList(),
'artist' => items.map((item) => Artist.fromJson(item)).toList(),
'album' => items.map((item) => Album.fromJson(item)).toList(),
'playlist' => items.map((item) => Playlist.fromJson(item)).toList(),
_ => items,
};
}
return results;
}