【发布时间】:2021-10-26 20:22:26
【问题描述】:
在下面的代码中,我试图获取 snap 的 id。如果用户点击保存,则应该记录此信息。
但是,我无法获得与所选项目关联的正确 ID。如果你能把我引向正确的方向,那将不胜感激。非常感谢。
Padding(
padding: const EdgeInsets.fromLTRB(8.0, 3.0, 0.0, 0.0),
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('Users')
.doc(FirebaseAuth.instance.currentUser.uid)
.collection('projects')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
const Text("Loading.....");
else {
List<DropdownMenuItem <Project>> goalItems = [];
for (int i = 0; i < snapshot.data.docs.length; i++) {
snap = snapshot.data.docs[i];
// print (gael.id);
// print(snap['project_Name']);
goalItems.add(
DropdownMenuItem(
value: Project(snap['project_Name'], snap.id),//(snap['project_Name'], snap.id),
child: SizedBox(
width:MediaQuery.of(context).size.width*0.89,
child: Text(
(snap['project_Name']),
style: TextStyle(color: Colors.black),
),
),
// style: TextStyle(color: Color(0xff11b719)),
// ),
),
);
}
return Row(
children:<Widget> [
DropdownButton <Project>(
items: goalItems,
onChanged: (Project pro) {
setState(() {
selectedProject = pro.name;
taskNewValue ['project_Name'] = pro.name ;
taskNewValue['project_ID'] = pro.id;
print(pro.id);
});
},
value: selectedProject,
isExpanded: false,
hint: Text(projectName,
style: TextStyle(color: Color (0xff29B6F6)), //Color(0xff0d53dc)),
),
)]);
}
return Container(
height: 0,width: 0,
);
}),
),
class Project {
// var User(this.name, this.id);
final String id;
final String name;
Project(this.id,this.name);
}
//最后一次修改完成。当我删除值时,它可以工作,但是当我选择一个新项目时,它不会显示
Padding(
padding: const EdgeInsets.fromLTRB(8.0, 3.0, 0.0, 0.0),
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('Users')
.doc(FirebaseAuth.instance.currentUser.uid)
.collection('projects')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
const Text("Loading.....");
else {
List<DropdownMenuItem <Project>> goalItems = [];
for (int i = 0; i < snapshot.data.docs.length; i++) {
snap = snapshot.data.docs[i];
print(snap.id);
print(snap['project_Name']);
goalItems.add(
DropdownMenuItem(
value: Project(snap.id, snap['project_Name']),
//(snap['project_Name'], snap.id),
child: SizedBox(
width: MediaQuery
.of(context)
.size
.width * 0.89,
child: Text(
(snap['project_Name']),
style: TextStyle(color: Colors.black),
),
),
// style: TextStyle(color: Color(0xff11b719)),
// ),
),
);
}
return Row(
children: <Widget>[
DropdownButton <Project>(
items: goalItems,
onChanged: (Project pro) {
setState(() {
selectedProject = pro.name;
project_ID=pro.id;
myTest = pro.name;
final test4 = Project(project_ID, myTest);
// print('ID');
// print(pro.id);
// print('name');
// print(pro.name);
// print('test4');
// print(test4.id);
// print(test4.name);
// print(project_ID);
});
},
// value: Project(project_ID,myTest),//selectedProject,
isExpanded: false,
hint: Text(projectName,
style: TextStyle(color: Color(
0xff29B6F6)), //Color(0xff0d53dc)),
),
)
]);
}
return Container(
height: 0, width: 0,
);
}),
),
我使用以下代码创建了一个新页面。我收到以下错误。
在构建 StreamBuilder
我不知道如何解决这个问题。
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
var selectedProject;
var idProject;
DocumentSnapshot snap;
class MyTest extends StatefulWidget {
const MyTest({Key key}) : super(key: key);
@override
_MyTestState createState() => _MyTestState();
}
class _MyTestState extends State<MyTest> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
title: new Text('test'),
actions: <Widget>[
IconButton(
icon: Icon(
Icons.add_circle_outline,
color: Colors.white,
),
onPressed: () {
},
),
],
),
body:
Padding(
padding: const EdgeInsets.fromLTRB(8.0, 3.0, 0.0, 0.0),
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('Users')
.doc(FirebaseAuth.instance.currentUser.uid)
.collection('projects')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
const Text("Loading.....");
else {
List<DropdownMenuItem <Project>> goalItems = [];
for (int i = 0; i < snapshot.data.docs.length; i++) {
snap = snapshot.data.docs[i];
print(snap.id);
print(snap['project_Name']);
goalItems.add(
DropdownMenuItem(
value: Project(snap.id, snap['project_Name']),
//(snap['project_Name'], snap.id),
child: SizedBox(
width: MediaQuery
.of(context)
.size
.width * 0.89,
child: Text(
(snap['project_Name']),
style: TextStyle(color: Colors.black),
),
),
// style: TextStyle(color: Color(0xff11b719)),
// ),
),
);
}
return Row(
children: <Widget>[
DropdownButton <Project>(
items: goalItems,
onChanged: (Project pro) {
setState(() {
selectedProject = pro.name;
idProject = pro.id;
final test4 = Project(idProject, selectedProject);
});
},
value: selectedProject,
isExpanded: false,
hint: Text('test',//projectName,
style: TextStyle(color: Color(
0xff29B6F6)), //Color(0xff0d53dc)),
),
)
]);
}
return Container(
height: 0, width: 0,
);
}),
),
);
}
}
class Project {
// var User(this.name, this.id);
final String id;
final String name;
Project(this.id,this.name);
}
【问题讨论】:
-
您好,您说“无法获得与所选项目关联的正确 ID”是什么意思。
-
现在,当我打印 id 时,我总是得到最后一个项目的 id。但我需要选择记录的 id
标签: firebase flutter google-cloud-firestore