有人可以向我解释如何使用FutureBuilder内部的ListView.Builder中的itemCount。
目前,我的FirebaseCloud Store只有一个Document,而我的应用正在返回一个无穷大的文档列表,
我尝试使用itemCount: snapshot.data.documents.length,
但是,得到错误:Class 'DocumentSnapshot' has no instance getter 'documents'. Receiver: Instance of 'DocumentSnapshot' Tried calling: documents
编辑,它只应显示一次此文档,如果与UID相关的文档不止一个,则仅显示一次
这是我的代码
final tabs = [
Center(
child: (Scaffold(
body: FutureBuilder(
future: FirebaseFirestore.instance
.collection('users')
.doc(uid)
.get(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.data == null)
return CircularProgressIndicator();
DocumentSnapshot manuais = snapshot.data;
if (snapshot.hasData) {
print('okkk');
print(manuais.data()['nome']);
} else {
print('nopeeeee');
}
return Container(
padding: EdgeInsets.all(16),
child: ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot manuais = snapshot.data;
return Card(
color: Colors.grey[250],
child: Container(
padding: EdgeInsets.all(10),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
new Image.asset(
'Images/pdflogo.png',
width: 32,
),
Center(
child: Text(
(manuais.data()['nome'].toString()),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 16),
),
),
ButtonBar(
children: <Widget>[
FlatButton(
child: const Text(
'Compartilhar / Download'),
onPressed: () async {
var request = await HttpClient()
.getUrl(Uri.parse(manuais
.data()['documento']));
var response =
await request.close();
Uint8List bytes =
await consolidateHttpClientResponseBytes(
response);
await Share.file(
'ESYS AMLOG',
'Manual.pdf',
bytes,
'image/jpg');
}),
],
),
],
),
),
);
}),
);
})))),
````
最佳答案
你必须做:
itemCount : 1
由于您只检索一个文档,因此在执行以下操作时:FirebaseFirestore.instance
.collection('users')
.doc(uid)
.get()
由于文档ID始终是唯一的,因此以上内容将始终检索一个文档。
关于database - FutureBuilder和ListView.builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63991804/