Firebase 获取ListView上已单击的项目Firestore文档id
在这里,我编写了访问集合中所有文档的代码,并将其显示在ListView中 下面是获取数据的方法Firebase 获取ListView上已单击的项目Firestore文档id,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,在这里,我编写了访问集合中所有文档的代码,并将其显示在ListView中 下面是获取数据的方法 Future getData() async { var firestore = Firestore.instance; QuerySnapshot qn = await firestore.collection("LiveProducts").getDocuments(); return qn.documents; } 这是我的构建方法 @override Widg
Future getData() async {
var firestore = Firestore.instance;
QuerySnapshot qn =
await firestore.collection("LiveProducts").getDocuments();
return qn.documents;
}
这是我的构建方法
@override
Widget build(BuildContext context) {
return Container(
child: FutureBuilder(
future: getData(),
builder: (_, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Padding(
padding: const EdgeInsets.only(
top: 295,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Center(
child: SpinKitCircle(
color: Colors.deepPurpleAccent,
size: 50.0,
),
),
],
),
);
} else {
return ListView.builder(
// title: Text(snapshot.data[index].data["ProductName"]),
shrinkWrap: true,
itemCount: snapshot.data.length,
itemBuilder: (_, index) {
return InkWell(
onTap: onClick,
child: Container(
child: Container(
margin: EdgeInsets.all(15),
height: 300,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
image: DecorationImage(
image: NetworkImage(snapshot
.data[index].data["ProductImageLink"]),
fit: BoxFit.cover,
),
boxShadow: [
BoxShadow(
color: Colors.deepPurpleAccent,
blurRadius: 8,
offset: Offset(0, 10),
)
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Row(
children: <Widget>[
Expanded(
child: Padding(
padding: const EdgeInsets.all(15.0),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Text(
// name,
snapshot.data[index]
.data["ProductName"],
style: TextStyle(
color: Colors.white,
fontSize: 30,
fontWeight: FontWeight.bold),
),
SizedBox(
height: 10,
),
Text(
// type,
// '',
snapshot.data[index]
.data["ProductCompany"],
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
],
),
),
),
],
),
void onClick() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) {
return PlacingBids();
}));
}
@覆盖
小部件构建(构建上下文){
返回容器(
孩子:未来建设者(
future:getData(),
构建器:(\uux,快照){
if(snapshot.connectionState==connectionState.waiting){
返回填充(
填充:仅限常量边设置(
排名:295,
),
子:列(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
居中(
孩子:斯宾基特圆(
颜色:颜色。深紫色,
尺寸:50.0,
),
),
],
),
);
}否则{
返回ListView.builder(
//标题:文本(快照.数据[索引].数据[“ProductName]”),
收缩膜:对,
itemCount:snapshot.data.length,
itemBuilder:(\ux,索引){
回墨槽(
onTap:onClick,
子:容器(
子:容器(
保证金:所有(15),
身高:300,
宽度:double.infinity,
装饰:盒子装饰(
边界半径:边界半径。圆形(20),
图像:装饰图像(
图像:网络图像(快照)
.data[index].data[“ProductImageLink”],
适合:BoxFit.cover,
),
boxShadow:[
箱形阴影(
颜色:颜色。深紫色,
半径:8,
偏移量:偏移量(0,10),
)
],
),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
划船(
儿童:[
扩大(
孩子:填充(
填充:常数边集全部(15.0),
子:列(
横轴对齐:
CrossAxisAlignment.start,
儿童:[
正文(
//名字,
快照.数据[索引]
.data[“ProductName”],
样式:TextStyle(
颜色:颜色,白色,
尺寸:30,
fontWeight:fontWeight.bold),
),
大小盒子(
身高:10,
),
正文(
//类型,
// '',
快照.数据[索引]
.数据[“产品公司”],
样式:TextStyle(
颜色:颜色,白色,
尺寸:20,
fontWeight:fontWeight.bold),
),
],
),
),
),
],
),
void onClick(){
Navigator.of(context).push(MaterialPageRoute(builder:){
返回贴牌投标();
}));
}
我已在ListView中列出了所有文档,但我面临一个问题。我需要获取ListView中已单击文档的Firestore id。如何操作?类有一个返回文档密钥的id
属性
您可以使用gesturedector
包装列表项,并将文档id传递给ònTap`回调
@override
Widget build(BuildContext context) {
return Container(
child: FutureBuilder(
future: getData(),
builder: (_, AsyncSnapshot<List<DocumentSnapshot>> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemBuilder: (_, index) {
return GestureDetector(
onTap: () {
print("Item with key " +
snapshot.data[index].id +
" clicked.");
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(snapshot.data[index].data["ProductName"]),
),
);
},
itemCount: snapshot.data.length,
);
}
return Container();
},
),
);
}
@覆盖
小部件构建(构建上下文){
返回容器(
孩子:未来建设者(
future:getData(),
生成器:(\ux,异步快照){
if(snapshot.hasData){
返回ListView.builder(
itemBuilder:(\ux,索引){
返回手势检测器(
onTap:(){
打印(“带密钥的项目”+
snapshot.data[index].id+
“点击”。);
},
孩子:填充(
填充:常数边集全部(8.0),
子项:文本(快照.数据[索引].数据[“ProductName]”),
),
);
},
itemCount:snapshot.data.length,
);
}
返回容器();
},
),
);
}
什么是getData()
返回的?它返回所有的文档您已经提供了代码,很抱歉我错过了那部分。没关系。我正在编写解决方案。先生,实际打印(“带有键的项”+快照。数据[索引]。id+“单击”。);此操作不起作用。此操作给出了错误类“DocumentSnapshot”