getRecommendations method

Future<List<Track>> getRecommendations({
  1. List<String>? seedTracks,
  2. List<String>? seedArtists,
  3. List<String>? seedGenres,
  4. Map<String, dynamic>? audioFeatures,
  5. String? market,
  6. int limit = 20,
})

Gets track recommendations based on seeds and optional audio features.

Implementation

Future<List<Track>> getRecommendations({
  List<String>? seedTracks,
  List<String>? seedArtists,
  List<String>? seedGenres,
  Map<String, dynamic>? audioFeatures,
  String? market,
  int limit = 20,
}) async {
  final params = {
    'limit': limit.toString(),
    if (market != null) 'market': market,
    if (seedTracks != null && seedTracks.isNotEmpty)
      'seed_tracks': seedTracks.join(','),
    if (seedArtists != null && seedArtists.isNotEmpty)
      'seed_artists': seedArtists.join(','),
    if (seedGenres != null && seedGenres.isNotEmpty)
      'seed_genres': seedGenres.join(','),
    if (audioFeatures != null)
      ...audioFeatures.map((k, v) => MapEntry(k, v.toString())),
  };

  final uri = Uri.https(_baseApiHost, '/v1/recommendations', params);
  final json = await _getJson(uri);

  final items = json['tracks'] as List<dynamic>;
  return items.map((item) => Track.fromJson(item)).toList();
}