![](/img/trans.png)
[英]Get Firestore documents with a field that is equal to a particular string in flutter
[英]Count number of documents with a particular field in a collection Firestore Flutter
我在 flutter 中制作了一個應用程序,它使用 Flutter 將我的用戶數據保存在 Firestore 中。我制作了一個名為“Result”的集合,其中包含多個文檔,每個文檔都有一個結果為“Normal”或“COVID”的文檔。 我想要做的是計算結果為 COVID 的所有人,並將其顯示在我的 flutter 應用程序中。
CollectionReference reference= (await FirebaseFirestore.instance.collection('Result').add({
"date" :Timestamp.now().millisecondsSinceEpoch.toString(),
"result": _results[0]["label"],
})) as CollectionReference<Object?>;
簡而言之,我期待這樣的事情:
下面的代碼打印,記錄是 3
void Result() async{
var query = FirebaseFirestore.instance.collection("Result");
var snapshot = await query.get();
var count = snapshot.size;
print(' Records are $count'); //Records are 3
}
當我按下生成報告時,我希望結果 function 顯示此計數。 希望現在我有點清楚了。
enter code hereimport 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class GenerateReport extends StatefulWidget {
const GenerateReport({Key? key}) : super(key: key);
@override
State<GenerateReport> createState() => _GenerateReportState();
}
class _GenerateReportState extends State<GenerateReport> {
//final fireStore= FirebaseFirestore.instance.collection('Result').where('result' , isEqualTo: 'COVID').count('result').snapshots();
final fireStore= FirebaseFirestore.instance.collection('Result').snapshots();
Result() async{
var query = await FirebaseFirestore.instance.collection("Result").where('result' , isEqualTo: 'COVID');
var snapshot = await query.get();
var count = snapshot.size; //return count;
print ('RESULTS ARE $count');
}
/* print(' Records are $count'); return Text ('Normal : $count',);//Records are 3 Future<Text> Result() async{*/
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('Generate Report'),
flexibleSpace: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: FractionalOffset.topCenter,
end: FractionalOffset.bottomCenter,
colors: <Color>[
Color.fromRGBO(47, 75, 104, 0.7),
Color.fromRGBO(47, 75, 104, 1)
]),
),
),
backgroundColor: Colors.transparent,
),
//centerTitle: true,
// backgroundColor: const Color.fromRGBO(47, 75, 104,1),
body: Center(
child: Column(
children: <Widget>[
const SizedBox(
height: 200,
),
ElevatedButton(
onPressed: Result,
child: const Text('Generate Report'),
/*async {
FirebaseFirestore.instance.collection('Result').get().then((QuerySnapshot querySnapshot) {
querySnapshot.docs.forEach((doc) {
print(doc["result"]);
});
});
}*/
),
//Result();
StreamBuilder<QuerySnapshot>(
stream: fireStore,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const CircularProgressIndicator();
}
if (snapshot.hasError) {
return const Text('Some error ');
}
return Expanded(
child: ListView.builder(
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapshot.data!.docs[index]['result'].toString()), //shows list of results
);
}),
);
}
),
],
),
),
);
}
}
在這里我可以看到結果列表而不是確切的計數應用程序
您需要在該集合的where
應用過濾器查詢,請使用:
void Result() async{
var query = FirebaseFirestore.instance.collection("Result").where("result", isEqualTo: "COVID");
var snapshot = await query.get();
var count = snapshot.size;
print(' Records are $count');
}
現在它應該獲取並打印result
字段中具有“COVID”值的文檔的計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.