Flutter как объединить FutureBuilder и Consumer?

#flutter #flutter-provider

#flutter #flutter-поставщик

Вопрос:

я хочу объединить a Consumer с my FutureBuilder , поэтому, если мы получим новые данные, только ListView.Builder() они должны быть восстановлены. Теперь это моя функция для вызова данных:

 Future <List<QueryDocumentSnapshot>> getSongsOnce() async {
    var songsCollection = await db.collection('songs').get();
    var loadedSongs = songsCollection.docs.toList();

    return loadedSongs;
  }
 

Я вызываю функцию в моем initState

 class _HomeScreenState extends State<HomeScreen> {
      Future<List<QueryDocumentSnapshot>> songFuture;
      FirestoreService db = FirestoreService();
      CollectionReference songs = FirebaseFirestore.instance.collection('songs');
    
      @override
      void initState() {
        super.initState();
        songFuture = db.getSongsOnce();
      }
...
 

Теперь это мое FutureBuilder , но у меня здесь несколько проблем:

 Consumer<SongProvider>(builder: (context, sProvider, _) {
                  return FutureBuilder(
                      future: songFuture,
                      builder: (context, snapshot) {
                          
    
                              switch (snapshot.connectionState) {
                                case ConnectionState.none:
                                case ConnectionState.waiting:
                                  return Align(
                                    alignment: Alignment.center,
                                    child: CircularProgressIndicator()
                                  );
                                case ConnectionState.done:
                                  if (snapshot.hasError) {
                                    return Text('Error: ${snapshot.error}');
                                  } else {
    
                                    return ListView.builder(
                              itemCount: snapshot.data.length,
                              itemBuilder: (context, index) {
                                return Text(
                                    snapshot.data[index]['songName'].toString());
                              });
                                  }
                              } 
                        }
 

return Мой текст должен быть чем-то вроде, sProvider.data[index]['songName'].toString() но мой db.getSongsOnce(); не дает мне чего-то доступного там. Также я не знаю, что написать в моем itemCount , поскольку у меня ничего нет внутри sProvider или db.getSongsOnce(); что дает мне длину.