Flutter Button 应该每天按一次

Flutter Button It should be pressed once in a day

有什么地方可以让我一天只按一次的按钮。 那天你不能再按那个按钮。 需要等到第二天再按

                  ElevatedButton(
                      onPressed: () {
                        print("Once in a day");
                        title = "Change Date";
                      },
                      child: Text(title),
                    ),

您创建了一个将日期时间转换为日期的函数 toDate。然后用 if 条件包装 onPressed 的内容,检查最后保存的日期(可以使用 userPreferences 或 sqflite 保存)是否不等于 currentDate。如果是这种情况,则执行 onPressed 的内容。完成后,您需要使用 userPreferences 或 sqflite 保存当前日期,以便您可以在下次用户按下按钮时检查当天是否已按下该按钮。 这是一小段代码。

///takes a dateTime and returns the date belonging to it
DateTime toDate(DateTime time) {
  return DateTime(time.year, time.month, time.day);
}

String title = "";
st() {
  return ElevatedButton(
    onPressed: () {
      if (/*check if the date the button was pressed the last 
      time is not equal to the toDate(DateTime.now())*/) {
        print("Once in a day");
        title = "Change Date";
        //save the toDate(DateTime.now()) using 
        //shared Preferences or sqflite
      }
    },
    child: Text(title),
  );
}

在您的 onPress 函数中添加以下代码,

ElevatedButton(
  onPressed: () {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    final currentTime = DateTime.now();
    DateTime resetTime = DateTime.parse(prefs.getString("time"));
    
    if(resetTime != null && !compareDate(currentTime, resetTime))
                                    prefs.setBool("one_tap", true);
                                  
      if(prefs.getBool("one_tap") == null || prefs.getBool("one_tap")){
          print("Once in a day");
          title = "Change Date";
          prefs.setBool("one_tap", false);
          prefs.setString("time", currentTime.toString());
         }
},
child: Text(title),),

compareDate(DateTime current, DateTime reset) {
    if (reset != null) {
      return current.year == reset.year &&
          current.month == reset.month &&
          current.day == reset.day;
    } else {
      return true;
    }
  }