如何让 Flutter Widget 在特定时间以天为单位后消失?

问题描述

我在主屏幕上有几个小部件,其中一个只有在用户保存一些数据时才会出现,从那一刻起 我想计算 7 天,如果没有其他事情发生,小部件将被删除。 我试过这样的事情:

//当用户保存数据到widget

  _saveTime() async {
    SharedPreferences pref = await SharedPreferences.getInstance();
    pref.setString(
        'StoreTime',DateTime.Now().add(Duration(days: 8)).toString());
  }

然后在首页

...
bool _thirdMenu;
String _difDays = '';

 @override
  initState() {
    super.initState();
  _thirdMenu = true;
  
    WidgetsBinding.instance.addobserver(this);
    _init();
}

  _init() async {
    SharedPreferences pref = await SharedPreferences.getInstance();
    String oldTimePref = pref.getString('StoreTime') ?? '1969-07-20 20:18:04Z';
    DateTime oldTime = DateTime.parse(oldTimePref);
    DateTime newTime = DateTime.Now();
    var difference = oldTime.difference(newTime);
    if (difference.inDays > 0) {
      setState(() {
        _thirdMenu = true;
        _difDays = difference.inDays.toString();
      });
    } else {
      setState(() {
        _thirdMenu = false;
      });
    }
  }

不工作,时间保持不变,小部件仍然显示......

解决方法

如果你想用几天的时间工作,我认为你可以不用几小时和几分钟来工作。 您可以隔离日期并进行检查,而无需使用时差。

int oldDay = oldTime.day;
int today = newTime.day;
if(today - oldDay >= 7) {
  setState(() {
        _thirdMenu = false;
      });
} else {
  setState(() {
        _thirdMenu = true;
      });
}