如何在 flutter firebase 中获取今天记录的 doc.length
How to get the doc.length of today record in flutter firebase
我是 flutter firebase 的新手,如何显示我的 Total sales 销售记录的长度。我有 SalesRecord 和字段名称 Created 的集合,我想知道这一天我做了多少销售。
我的代码:
var todaySales = 0;
FutureBuilder(
future: FirebaseFirestore.instance
.collection('SalesRecord')
// .orderBy('Created', descending: true | false)
.where("Created", isGreaterThan: DateTime.now())
.get()
.then((myDocuments) {
setState(() {
todaySales = myDocuments.docs.length;
});
//print("${myDocuments.docs.length}");
}),
builder: (context, snapshot) {
if (snapshot.hasData) {
return const Center(
child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return const Center(
child: CircularProgressIndicator());
}
return Text(
todaySales.toString(),
style: const TextStyle(
fontSize: 50.0,
fontWeight: FontWeight.bold,
),
);
}),
代码更新:-
FutureBuilder<QuerySnapshot<Map<String, dynamic>>>(
future: FirebaseFirestore.instance
.collection('SalesRecord')
.where("Created",
isGreaterThan: DateTime.now())
.get(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
snapshot.data!.docs.length.toString(),
style: const TextStyle(
fontSize: 50.0,
fontWeight: FontWeight.bold,
),
);
} else if (snapshot.hasError) {
return const Center(
child: CircularProgressIndicator());
} else {
return CircularProgressIndicator();
}
}),
当我更新 SalesRecord 时,它更改了一段时间的值,但记录计数在 20 秒后再次自行恢复为 0
您可以执行以下操作:
FutureBuilder<QuerySnapshot<Map<String, dynamic>>>(
future: FirebaseFirestore.instance
.collection('SalesRecord')
.where("Created", isGreaterThan: DateTime.now())
.get(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
snapshot.data!.docs.length.toString(),
style: const TextStyle(
fontSize: 50.0,
fontWeight: FontWeight.bold,
),
);
} else if (snapshot.hasError) {
return const Center(child: CircularProgressIndicator());
} else {
return CircularProgressIndicator();
}
}),
get()
returns a Future<QuerySnapshot<Map<String, dynamic>>>
因此将其分配给 future
属性。然后 AsyncSnapshot
类型的 snapshot
将包含此 future
的数据,您可以使用 data
属性 在 if(snapshot.hasData)
中访问它。
计数返回 0 的原因是 DateTime.now() 获取当前日期时间,即如果您在 30 秒前进行了销售,则不会显示,因为当前时间比现在晚 30 秒比上一个。
因此声明一个如下所示的变量,它将为我们提供今天的日期 (2022-01-31 00:00:00.000) 和零时间值以标记一天的开始。
DateTime dateToday = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
现在在您的代码中将其用作:-
FutureBuilder<QuerySnapshot<Map<String, dynamic>>>(
future: FirebaseFirestore.instance
.collection('SalesRecord')
.where("Created",
isGreaterThan: dateToday)
.get(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
snapshot.data!.docs.length.toString(),
style: const TextStyle(
fontSize: 50.0,
fontWeight: FontWeight.bold,
),
);
} else if (snapshot.hasError) {
return const Center(
child: CircularProgressIndicator());
} else {
return CircularProgressIndicator();
}
})
我是 flutter firebase 的新手,如何显示我的 Total sales 销售记录的长度。我有 SalesRecord 和字段名称 Created 的集合,我想知道这一天我做了多少销售。
我的代码:
var todaySales = 0;
FutureBuilder(
future: FirebaseFirestore.instance
.collection('SalesRecord')
// .orderBy('Created', descending: true | false)
.where("Created", isGreaterThan: DateTime.now())
.get()
.then((myDocuments) {
setState(() {
todaySales = myDocuments.docs.length;
});
//print("${myDocuments.docs.length}");
}),
builder: (context, snapshot) {
if (snapshot.hasData) {
return const Center(
child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return const Center(
child: CircularProgressIndicator());
}
return Text(
todaySales.toString(),
style: const TextStyle(
fontSize: 50.0,
fontWeight: FontWeight.bold,
),
);
}),
代码更新:-
FutureBuilder<QuerySnapshot<Map<String, dynamic>>>(
future: FirebaseFirestore.instance
.collection('SalesRecord')
.where("Created",
isGreaterThan: DateTime.now())
.get(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
snapshot.data!.docs.length.toString(),
style: const TextStyle(
fontSize: 50.0,
fontWeight: FontWeight.bold,
),
);
} else if (snapshot.hasError) {
return const Center(
child: CircularProgressIndicator());
} else {
return CircularProgressIndicator();
}
}),
当我更新 SalesRecord 时,它更改了一段时间的值,但记录计数在 20 秒后再次自行恢复为 0
您可以执行以下操作:
FutureBuilder<QuerySnapshot<Map<String, dynamic>>>(
future: FirebaseFirestore.instance
.collection('SalesRecord')
.where("Created", isGreaterThan: DateTime.now())
.get(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
snapshot.data!.docs.length.toString(),
style: const TextStyle(
fontSize: 50.0,
fontWeight: FontWeight.bold,
),
);
} else if (snapshot.hasError) {
return const Center(child: CircularProgressIndicator());
} else {
return CircularProgressIndicator();
}
}),
get()
returns a Future<QuerySnapshot<Map<String, dynamic>>>
因此将其分配给 future
属性。然后 AsyncSnapshot
类型的 snapshot
将包含此 future
的数据,您可以使用 data
属性 在 if(snapshot.hasData)
中访问它。
计数返回 0 的原因是 DateTime.now() 获取当前日期时间,即如果您在 30 秒前进行了销售,则不会显示,因为当前时间比现在晚 30 秒比上一个。
因此声明一个如下所示的变量,它将为我们提供今天的日期 (2022-01-31 00:00:00.000) 和零时间值以标记一天的开始。
DateTime dateToday = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
现在在您的代码中将其用作:-
FutureBuilder<QuerySnapshot<Map<String, dynamic>>>(
future: FirebaseFirestore.instance
.collection('SalesRecord')
.where("Created",
isGreaterThan: dateToday)
.get(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(
snapshot.data!.docs.length.toString(),
style: const TextStyle(
fontSize: 50.0,
fontWeight: FontWeight.bold,
),
);
} else if (snapshot.hasError) {
return const Center(
child: CircularProgressIndicator());
} else {
return CircularProgressIndicator();
}
})