pru*_*ati 10 dart firebase flutter google-cloud-firestore
我尝试了以下操作,但它返回一个随机字符串,该字符串不存在于 firestore 中。
我确实设法使用查询快照获取了父集合的文档 ID
DocumentReference doc_ref=Firestore.instance.collection("board").document(doc_id).collection("Dates").document();
var doc_id2=doc_ref.documentID;
Run Code Online (Sandbox Code Playgroud)
更多代码:我在尝试访问文档 ID 时遇到错误。我尝试使用 await 但它给出了错误。
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
title: new Text(
"National Security Agency",
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.normal,
fontSize: 24.0),
),
backgroundColor: Colors.redAccent,
centerTitle: true,
actions: <Widget>[
new DropdownButton<String>(
items: <String>['Sign Out'].map((String value) {
return new DropdownMenuItem<String>(
value: value,
child: new Text(value),
);
}).toList(),
onChanged: (_) => logout(),
)
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
},
child: Icon(Icons.search),
),
body: StreamBuilder (
stream: cloudfirestoredb,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return new Text('Loading...');
return new ListView(
children: snapshot.data.documents.map((document) {
var doc_id=document.documentID;
var now= new DateTime.now();
var formatter=new DateFormat('MM/dd/yyyy');
String formatdate = formatter.format(now);
var date_to_be_added=[formatdate];
DocumentReference doc_ref=Firestore.instance.collection("board").document(doc_id).collection("Dates").document();
var doc_id5= await get_data(doc_ref);
print(doc_id);
Firestore.instance.collection("board").document(doc_id).collection("Dates").document(doc_id5).updateData({"Date":FieldValue.arrayUnion(date_to_be_added)});
return cardtemplate(document['Name'], document['Nationality'], doc_id);
}).toList(),
);
},
),
);
}
Run Code Online (Sandbox Code Playgroud)
小智 12
更新后,您现在可以使用这行代码来访问文档ID,
snapshot.data.docs[index].reference.id
Run Code Online (Sandbox Code Playgroud)
其中快照是 QuerySnapshot。
这是一个例子。
FutureBuilder(
future: FirebaseFirestore.instance
.collection('users')
.doc(FirebaseAuth.instance.currentUser!.uid)
.collection('addresses')
.get(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
}else{return Text(snapshot.data.docs[0].reference.id.toString());}
Run Code Online (Sandbox Code Playgroud)
要获取集合中的文档 ID:
var collection = FirebaseFirestore.instance.collection('collection');
var querySnapshots = await collection.get();
for (var snapshot in querySnapshots.docs) {
var documentID = snapshot.id; // <-- Document ID
}
Run Code Online (Sandbox Code Playgroud)
获取新添加数据的文档ID:
var collection = FirebaseFirestore.instance.collection('collection');
var docRef = await collection.add(someData);
var documentId = docRef.id; // <-- Document ID
Run Code Online (Sandbox Code Playgroud)
您必须检索该文档的 id。
尝试这个
DocumentReference doc_ref=Firestore.instance.collection("board").document(doc_id).collection("Dates").document();
DocumentSnapshot docSnap = await doc_ref.get();
var doc_id2 = docSnap.reference.documentID;
Run Code Online (Sandbox Code Playgroud)
确保在标记为async的函数中使用它,因为代码使用 await。
编辑: 在评论中回答您的问题
Future<String> get_data(DocumentReference doc_ref) async {
DocumentSnapshot docSnap = await doc_ref.get();
var doc_id2 = docSnap.reference.documentID;
return doc_id2;
}
//To retrieve the string
String documentID = await get_data();
Run Code Online (Sandbox Code Playgroud)
编辑2:
只需将 async 添加到 map 函数即可。
snapshot.data.documents.map((document) async {
var doc_id=document.documentID;
var now= new DateTime.now();
var formatter=new DateFormat('MM/dd/yyyy');
String formatdate = formatter.format(now);
var date_to_be_added=[formatdate];
DocumentReference doc_ref=Firestore.instance.collection("board").document(doc_id).collection("Dates").document();
var doc_id5= await get_data(doc_ref);
print(doc_id);
Firestore.instance.collection("board").document(doc_id).collection("Dates").document(doc_id5).updateData({"Date":FieldValue.arrayUnion(date_to_be_added)});
return cardtemplate(document['Name'], document['Nationality'], doc_id);
}).toList(),
Run Code Online (Sandbox Code Playgroud)
让我知道这个是否奏效
您可以在文档中添加值后使用value.id获取 documentId, 如下所示:-
CollectionReference users = FirebaseFirestore.instance.collection('candidates');
Future<void> registerUser() {
// Call the user's CollectionReference to add a new user
return users.add({
'name': enteredTextName, // John Doe
'email': enteredTextEmail, // Stokes and Sons
'profile': dropdownValue ,//
'date': selectedDate.toLocal().toString() ,//// 42
})
.then((value) =>(showDialogNew(value.id)))
.catchError((error) => print("Failed to add user: $error"));
}
Run Code Online (Sandbox Code Playgroud)
这里,value.id给出了ducumentId。
| 归档时间: |
|
| 查看次数: |
18917 次 |
| 最近记录: |