bla*_*ian 12 querying dart firebase flutter google-cloud-firestore
我只想通过其ID 检索单个文档的数据。我的示例数据方法:
TESTID1 {
'name': 'example',
'data': 'sample data',
}
Run Code Online (Sandbox Code Playgroud)
是这样的:
Firestore.instance.document('TESTID1').get() => then(function(document) {
print(document('name'));
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不是正确的语法。
我找不到有关在flutter(飞镖)中查询firestore的任何详细文档,因为firebase文档仅解决了本机WEB,iOS,Android等问题,而没有解决Flutter。cloud_firestore的文档也太短了。只有一个示例显示了如何将多个文档查询到流中,这不是我想要的。
有关缺少文档的相关问题:https : //github.com/flutter/flutter/issues/14324
从单个文档中获取数据并不难。
更新:
Firestore.instance.collection('COLLECTION').document('ID')
.get().then((DocumentSnapshot) =>
print(DocumentSnapshot.data['key'].toString());
);
Run Code Online (Sandbox Code Playgroud)
不执行。
Ale*_*amo 26
但这似乎不是正确的语法。
这是不正确的语法,因为您错过了collection()通话。您无法document()直接致电Firestore.instance。要解决此问题,您应该使用以下方法:
var document = await Firestore.instance.collection('COLLECTION_NAME').document('TESTID1');
document.get() => then(function(document) {
print(document('name'));
}
Run Code Online (Sandbox Code Playgroud)
或者以更简单的方式:
var document = await Firestore.instance.document('COLLECTION_NAME/TESTID1');
document.get() => then(function(document) {
print(document('name'));
}
Run Code Online (Sandbox Code Playgroud)
如果要实时获取数据,请使用以下代码:
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"]);
}
);
}
Run Code Online (Sandbox Code Playgroud)
它还将帮助您将名称设置为文本视图。
小智 20
如果要使用 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"));
Run Code Online (Sandbox Code Playgroud)
小智 8
这很简单,您可以使用 DOCUMENT SNAPSHOT
DocumentSnapshot variable = await Firestore.instance.collection('COLLECTION NAME').document('DOCUMENT ID').get();
Run Code Online (Sandbox Code Playgroud)
您可以使用访问其数据 variable.data['FEILD_NAME']
更新 FirebaseFirestore 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"]);
}
);
}
Run Code Online (Sandbox Code Playgroud)
您可以在函数(例如按下按钮时)或小部件(例如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.
}
Run Code Online (Sandbox Code Playgroud)
在FutureBuilder(一次听)
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());
},
)
Run Code Online (Sandbox Code Playgroud)
在一个StreamBuilder:(一直在听)
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());
},
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14128 次 |
| 最近记录: |