我需要使用Flutter创建签入和 checkout 页面。该页面应该有两个按钮,分别用于签入和 checkout 。签入按钮工作正常,并且时间戳已成功插入Firebase。但是,“ checkout ”按钮未按预期工作。
这是密码。
class _CheckInOutState extends State<CheckInOut> {
DateTime? checkInTime;
DateTime? checkOutTime;
bool isCheckedIn = false;
String getFormattedDateTime(DateTime dateTime) {
return DateFormat('yyyy-MM-dd HH:mm:ss').format(dateTime);
}
Future<void> saveCheckInOutTime() async {
try {
await FirebaseFirestore.instance.collection('checkInOut').add({
'fileName': widget.selectedFileName,
'checkInTime': isCheckedIn ? Timestamp.fromDate(DateTime.now()) : null,
'checkOutTime': !isCheckedIn ? Timestamp.fromDate(DateTime.now()) : null,
'staffName': widget.staffName,
});
} catch (e) {
print('Error saving check-in/out time: $e');
}
}
void toggleCheckInOut() async {
setState(() {
isCheckedIn = !isCheckedIn;
if (isCheckedIn) {
// Check In
checkInTime = DateTime.now();
checkOutTime = null; // Reset checkOutTime when checking in
} else {
// Check Out
checkOutTime = DateTime.now();
}
});
// Save check-in and check-out times to Firestore
await saveCheckInOutTime();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Check In/Out'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (isCheckedIn && checkInTime != null)
Text(
'Check In: ${getFormattedDateTime(checkInTime!)}',
style: TextStyle(fontSize: 18),
),
if (!isCheckedIn && checkOutTime != null)
Text(
'Check Out: ${getFormattedDateTime(checkOutTime!)}',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 40),
ElevatedButton(
onPressed: isCheckedIn ? null : toggleCheckInOut,
child: Text(isCheckedIn ? 'Checked In' : 'Check In'),
),
SizedBox(height: 40),
ElevatedButton(
onPressed: isCheckedIn ? toggleCheckInOut : null,
child: Text(isCheckedIn ? 'Check Out' : 'Checked Out'),
),
],
),
),
);
}
}
字符串
我一直试图在网上搜索,但我已经进入了死胡同。程式码中没有错误。两个按钮都可以单击。请帮我解决这个问题。- 谢谢-谢谢
1条答案
按热度按时间5kgi1eie1#
你有写的权限吗?
规则
字符串