У меня есть рабочий код, который получает коллекцию («песни») из Firestore, используя Future и QuerySnapshot. У меня есть это в небольшой функции getSongs (). Пока я в этой функции, у меня есть доступ к идентификаторам документов ... поэтому, если я позвоню, скажем:
печать (songsQuery.documents [1] .documentID);
Я получаю -LSvpZxM2pUIYjjp0qby
Но позже в своем коде я использую FutureBuilder, где я вызываю getSongs () для будущего, а затем создаю ListView с фрагментами информации о песне (Artist, Title и т. Д.) Из снимка в построителе:.
Пока я нахожусь в этом виджете, я не могу понять, как ссылаться на мой .documentID больше. Я могу получить все элементы .data для каждого документа ... но не фактический documentID.
Есть ли что-то очень очевидное, чего мне не хватает?
Спасибо за любую помощь.
ER
Я искал интернет, пытаясь решить безуспешно. Кажется, что многие люди берут список документов, загружают их в массив, добавляют doc.id, помещают все это в массив элементов. Тогда используйте предметы. Я хотел бы просто использовать снимки, полученные от Firestore, и ссылаться на doc.id напрямую, если это возможно.
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'dart:async';
class AllSongs extends StatelessWidget {
Future getSongs() async {
var firestore = Firestore.instance;
QuerySnapshot songsQuery = await firestore.collection('songs').getDocuments();
print(songsQuery.documents[1].documentID);
//Here I can get to documentID...
return songsQuery.documents;
}
@override
Widget build(BuildContext context) {
return Center(
child: FutureBuilder(
future: getSongs(),
builder: (_, songSnapshots){
print('How do I reference the DocumentID in here?');
print(songSnapshots.data.length);
print(songSnapshots.data[0].data['title']);
//print(songSnapshots.data[0].documentID);
//print(songSnapshots.data[0].ref);
//print(songSnapshots.data[0].data[ DOCUMENTID?? ]);
if(songSnapshots.connectionState == ConnectionState.waiting){
return Center(
child: Text('Loading...'),
);
} else {
return ListView.builder(
itemCount: songSnapshots.data.length ,
itemBuilder: (_, index){
return ListTile(
title: Text(songSnapshots.data[index].data['title']),
subtitle: Text(songSnapshots.data[index].data['artist']),
);
});
}
},
)
);
}
}