#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();
что дает мне длину.