每个用户每天显示一次消息

问题描述

我想每天在登录时向用户显示一条消息。我知道我们可以使用 .difference().inDays >= 1 来比较 2 个 DateTimes 如果为真则显示消息。我感到困惑的是我们应该比较哪 2 个 DateTime。我目前使用 DateTime.Now() 和一个返回上次登录间的函数。这样做的问题是每次用户登录时都会更新上次登录时间。这是我的函数的样子:

    Future<void> showDialog() async {
    if (Client.loginResponse.loginMessage[0].message != '') {
      if (DateTime.Now()
              .difference(await MobileLoginCache.getLastLogin(
                  Client.loginResponse.dataSource,Client.loginResponse.user.name,localStorage))
              .inDays >=
          1) {
        await LoginMessageDialog(content: Client.loginResponse.loginMessage[0].message,context: context).show();
      }
    }
  }

我应该使用什么来代替上次登录时间?

解决方法

当您在 SharedPreferences 中显示对话框时,您可能只保留 DateTime 吗?

Future<void> showDialog() async {
  if (Client.loginResponse.loginMessage[0].message != '') {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    DateTime now = DateTime.now();
    DateTime lastMessageTime = new DateTime(prefs.getLong("lastMessageTime",0));
    if (now.difference(lastMessageTime).inDays >= 1) {
      await prefs.setLong("lastMessageTime",now.getTime());
      await LoginMessageDialog(content: Client.loginResponse.loginMessage[0].message,context: context).show();
    }
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...