diff --git a/lib/providers/track_provider.dart b/lib/providers/track_provider.dart index bb2e5978..0107f741 100644 --- a/lib/providers/track_provider.dart +++ b/lib/providers/track_provider.dart @@ -230,8 +230,34 @@ class TrackNotifier extends Notifier { final trackList = results['tracks'] as List? ?? []; final artistList = results['artists'] as List? ?? []; - final tracks = trackList.map((t) => _parseSearchTrack(t as Map)).toList(); - final artists = artistList.map((a) => _parseSearchArtist(a as Map)).toList(); + // Parse tracks with error handling per item + final tracks = []; + for (final t in trackList) { + try { + if (t is Map) { + tracks.add(_parseSearchTrack(t)); + } + } catch (e) { + // ignore: avoid_print + print('[Search] Failed to parse track: $e'); + } + } + + // Parse artists with error handling per item + final artists = []; + for (final a in artistList) { + try { + if (a is Map) { + artists.add(_parseSearchArtist(a)); + } + } catch (e) { + // ignore: avoid_print + print('[Search] Failed to parse artist: $e'); + } + } + + // ignore: avoid_print + print('[Search] Parsed ${tracks.length} tracks, ${artists.length} artists'); state = TrackState( tracks: tracks, @@ -310,18 +336,27 @@ class TrackNotifier extends Notifier { } Track _parseSearchTrack(Map data) { + // Handle duration_ms which might be int or double + int durationMs = 0; + final durationValue = data['duration_ms']; + if (durationValue is int) { + durationMs = durationValue; + } else if (durationValue is double) { + durationMs = durationValue.toInt(); + } + return Track( - id: data['spotify_id'] as String? ?? '', - name: data['name'] as String? ?? '', - artistName: data['artists'] as String? ?? '', - albumName: data['album_name'] as String? ?? '', - albumArtist: data['album_artist'] as String?, - coverUrl: data['images'] as String?, - isrc: data['isrc'] as String?, - duration: ((data['duration_ms'] as int? ?? 0) / 1000).round(), + id: (data['spotify_id'] ?? data['id'] ?? '').toString(), + name: (data['name'] ?? '').toString(), + artistName: (data['artists'] ?? data['artist'] ?? '').toString(), + albumName: (data['album_name'] ?? data['album'] ?? '').toString(), + albumArtist: data['album_artist']?.toString(), + coverUrl: data['images']?.toString(), + isrc: data['isrc']?.toString(), + duration: (durationMs / 1000).round(), trackNumber: data['track_number'] as int?, discNumber: data['disc_number'] as int?, - releaseDate: data['release_date'] as String?, + releaseDate: data['release_date']?.toString(), ); }