getSimilar method

Future<List<Track>?> getSimilar({
  1. String? track,
  2. String? artist,
  3. String? mbid,
  4. int? limit,
  5. bool autoCorrect = false,
})

Get the similar tracks for this track on Last.fm, based on listening data.

https://www.last.fm/api/show/track.getSimilar

Implementation

Future<List<Track>?> getSimilar({
  String? track,
  String? artist,
  String? mbid,
  int? limit,
  bool autoCorrect = false,
}) async {
  if ((track == null || artist == null) && mbid == null) {
    return Future.error(
      ScrobblenautException(
        description:
            'At least mbid is required. '
            'Can be used also track and artist.',
      ),
    );
  }

  final parameters = {
    'track': track,
    'artist': artist,
    'mbid': mbid,
    'limit': limit,
    'autocorrect': (autoCorrect ? 1 : 0),
  };

  final request = Request(
    api: _api,
    method: 'track.getSimilar',
    parameters: parameters,
  );

  final response = await request.send(mode: RequestMode.GET);

  final similarTracks = response['similartracks']['track'];

  return similarTracks == null
      ? null
      : List.generate(
          (similarTracks as List).length,
          (i) => Track.fromJson(similarTracks[i]),
        );
}