Flooth의 Firestore에서 단일 문서 쿼리(cloud_firestore Plugin)
편집: 이 질문은 오래된 질문이며, 현재 새로운 설명서와 최신 답변을 사용할 수 있습니다.
ID를 통해 단일 문서의 데이터만 검색하고 싶습니다.다음의 예제 데이터를 사용한 접근 방식:
TESTID1 {
'name': 'example',
'data': 'sample data',
}
다음과 같은 것이었습니다.
Firestore.instance.document('TESTID1').get() => then(function(document) {
print(document('name'));
}
하지만 그것은 정확한 구문이 아닌 것 같습니다.
파이어베이스 설명서가 네이티브 WEB, iOS, Android 등만 다루고 Floot가 아니기 때문에 Floot(dart) 내에서 Firestore 쿼리에 대한 자세한 설명서를 찾을 수 없었습니다.cloud_firestore에 대한 설명서도 너무 짧습니다.여러 문서를 스트림에 쿼리하는 방법을 보여주는 예는 하나뿐이지만 내가 원하는 것은 아닙니다.
설명서 누락 관련 문제: https://github.com/flutter/flutter/issues/14324
단일 문서에서 데이터를 얻는 것은 그리 어려운 일이 아닙니다.
업데이트:
Firestore.instance.collection('COLLECTION').document('ID')
.get().then((DocumentSnapshot) =>
print(DocumentSnapshot.data['key'].toString());
);
실행되지 않았습니다.
하지만 그것은 정확한 구문이 아닌 것 같습니다.
누락된 구문이므로 올바른 구문이 아닙니다.collection()
콜. 콜은 할 수 없습니다.document()
직접 당신에게Firestore.instance
이 문제를 해결하려면 다음과 같은 방법을 사용해야 합니다.
var document = await Firestore.instance.collection('COLLECTION_NAME').document('TESTID1');
document.get() => then(function(document) {
print(document("name"));
});
또는 더 간단한 방법으로:
var document = await Firestore.instance.document('COLLECTION_NAME/TESTID1');
document.get() => then(function(document) {
print(document("name"));
});
실시간으로 데이터를 가져오려면 다음 코드를 사용하십시오.
Widget build(BuildContext context) {
return new StreamBuilder(
stream: Firestore.instance.collection('COLLECTION_NAME').document('TESTID1').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return new Text("Loading");
}
var userDocument = snapshot.data;
return new Text(userDocument["name"]);
}
);
}
이름을 텍스트 보기로 설정하는 데도 도움이 됩니다.
Null 안전 코드(권장)
기능(예: 버튼을 누를 때) 또는 위젯 내부(예:FutureBuilder
).
방법: (일회 듣기)
var collection = FirebaseFirestore.instance.collection('users'); var docSnapshot = await collection.doc('doc_id').get(); if (docSnapshot.exists) { Map<String, dynamic>? data = docSnapshot.data(); var value = data?['some_field']; // <-- The value you want to retrieve. // Call setState if needed. }
한 번에 (한 번만 들어보세요.
FutureBuilder<DocumentSnapshot<Map<String, dynamic>>>( future: collection.doc('doc_id').get(), builder: (_, snapshot) { if (snapshot.hasError) return Text ('Error = ${snapshot.error}'); if (snapshot.hasData) { var data = snapshot.data!.data(); var value = data!['some_field']; // <-- Your value return Text('Value = $value'); } return Center(child: CircularProgressIndicator()); }, )
A에서 : (항상 듣고 있음)
StreamBuilder<DocumentSnapshot<Map<String, dynamic>>>( stream: collection.doc('doc_id').snapshots(), builder: (_, snapshot) { if (snapshot.hasError) return Text('Error = ${snapshot.error}'); if (snapshot.hasData) { var output = snapshot.data!.data(); var value = output!['some_field']; // <-- Your value return Text('Value = $value'); } return Center(child: CircularProgressIndicator()); }, )
where 절을 사용하려면
await Firestore.instance.collection('collection_name').where(
FieldPath.documentId,
isEqualTo: "some_id"
).getDocuments().then((event) {
if (event.documents.isNotEmpty) {
Map<String, dynamic> documentData = event.documents.single.data; //if it is a single document
}
}).catchError((e) => print("error fetching data: $e"));
이것은 간단합니다. 문서 스냅샷을 사용할 수 있습니다.
DocumentSnapshot variable = await Firestore.instance.collection('COLLECTION NAME').document('DOCUMENT ID').get();
다음을 사용하여 데이터에 액세스할 수 있습니다.variable.data['FEILD_NAME']
Firebase Firestore 12/2021 업데이트
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('YOUR COLLECTION NAME')
.doc(id) //ID OF DOCUMENT
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return new CircularProgressIndicator();
}
var document = snapshot.data;
return new Text(document["name"]);
}
);
}
이것이 2021년에 저에게 효과가 있었던 것입니다.
var userPhotos;
Future<void> getPhoto(id) async {
//query the user photo
await FirebaseFirestore.instance.collection("users").doc(id).snapshots().listen((event) {
setState(() {
userPhotos = event.get("photoUrl");
print(userPhotos);
});
});
}
파이어스토어 컬렉션에서 문서를 가져오거나 문서에 대한 일부 작업을 수행하고 일부 위젯을 사용하여 문서를 표시하지 않으려면 이 코드를 사용합니다(업데이트된 2022년 1월).
fetchDoc() async {
// enter here the path , from where you want to fetch the doc
DocumentSnapshot pathData = await FirebaseFirestore.instance
.collection('ProfileData')
.doc(currentUser.uid)
.get();
if (pathData.exists) {
Map<String, dynamic>? fetchDoc = pathData.data() as Map<String, dynamic>?;
//Now use fetchDoc?['KEY_names'], to access the data from firestore, to perform operations , for eg
controllerName.text = fetchDoc?['userName']
// setState(() {}); // use only if needed
}
}
간단한 방법:
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('YOUR COLLECTION NAME')
.doc(id) //ID OF DOCUMENT
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return new CircularProgressIndicator();
}
var document = snapshot.data;
return new Text(document["name"]);
}
);
}
var document = await FirebaseFirestore.instance.collection('Users').doc('CXvGTxT49NUoKi9gRt96ltvljz42').get();
Map<String,dynamic>? value = document.data();
print(value!['userId']);
Firestore 문서는 다음 코드로 가져올 수 있습니다.
future FirebaseDocument() async{
var variable = await FirebaseFirestore.instance.collection('Collection_name').doc('Document_Id').get();
print(variable['field_name']);
}
다음 단순 코드를 사용합니다.
Firestore.instance.collection("users").document().setData({
"name":"Majeed Ahmed"
});
언급URL : https://stackoverflow.com/questions/53517382/query-a-single-document-from-firestore-in-flutter-cloud-firestore-plugin
'source' 카테고리의 다른 글
갈라지는 낙타 케이스 (0) | 2023.07.03 |
---|---|
I18n in Spring 부츠 + Thymeleaf (0) | 2023.07.03 |
소스 제어에 저장 프로시저/DB 스키마 (0) | 2023.07.03 |
Oracle(ORA-02270): 이 열 목록 오류에 대해 일치하는 고유 또는 기본 키가 없습니다. (0) | 2023.07.03 |
mongodb에 어떤 스토리지 엔진이 사용되는지 어떻게 알 수 있습니까? (0) | 2023.06.28 |