Im trying to fetch a list of songs from firebase and add them all to a list of songs
Code for the SongEntity
import 'package:cloud_firestore/cloud_firestore.dart';
class SongEntity {
final String songId;
final String title;
final String artist;
final String link;
final String imageUrl;
SongEntity({
required this.songId,
required this.title,
required this.artist,
required this.link,
required this.imageUrl,
});
factory SongEntity.fromDocument(DocumentSnapshot doc) {
final data = doc.data() as Map<String, dynamic>;
return SongEntity(
songId: doc.id,
title: data['title'],
artist: data['artist'],
link: data['link'],
imageUrl: data['image'],
);
}
}
Code for the PlaylistProvider class that has the function to get the songs from firestore
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import '../../../domain/entities/song_entities/song_entity.dart';
class PlaylistProvider with ChangeNotifier {
List<SongEntity> _songs = [];
List<SongEntity> get songs => _songs;
getPlaylistFromFirestore(String collectionName, String playlistName) async {
final fireStore = FirebaseFirestore.instance;
await fireStore.collection(collectionName).get().then(
(querySnapshot) {
for (var docSnapshot in querySnapshot.docs) {
print('${docSnapshot.id} => ${docSnapshot.data()['artist']}');
_songs.add(SongEntity.fromDocument(docSnapshot));
notifyListeners();
}
},
onError: (e) => print("Error completing: $e"),
);
}
}
This part of the code works perfectly and all documents are printed out
print('${docSnapshot.id} => ${docSnapshot.data()['artist']}');
But when i try to print the value of songs from my homepage
print(Provider.of<PlaylistProvider>(context).songs);
I get this in console
I/flutter (10936): [Instance of 'SongEntity', Instance of 'SongEntity', Instance of 'SongEntity', Instance of 'SongEntity', Instance of 'SongEntity', Instance of 'SongEntity', Instance of 'SongEntity', Instance of 'SongEntity', Instance of 'SongEntity', Instance of 'SongEntity']
Any help will be greatly appreciated
Since you're printing the list of songs, it executes the toString
of your SongEntity
class - which defaults to the output you see.
If you want to show a different output, override the toString
method in your SongEntity
class. For example, like this:
class SongEntity {
...
@override
String toString() {
return 'SongEntity(songId: $songId, title: $title, artist: $artist, link: $link, imageUrl: $imageUrl)';
}
}
For a good explanation of toString
, see What does @override toString method do in a Flutter Dart class?