按钮功能问题:可点击但不能将数据插入Firebase

rmbxnbpk  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(119)

我需要使用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'),
            ),
          ],
        ),
      ),
    );
  }
}

字符串
我一直试图在网上搜索,但我已经进入了死胡同。程式码中没有错误。两个按钮都可以单击。请帮我解决这个问题。- 谢谢-谢谢

5kgi1eie

5kgi1eie1#

你有写的权限吗?
规则

match /checkInOut/{ID} {
   allow read, write: if true;
}

字符串

相关问题