如何在特定的时间内执行方法?

时间:2020-08-23 16:14:17

标签: flutter dart

我如何在固定时间内执行方法,就像我想在下午2:30运行方法一样。我知道Timer函数,但是长时间运行Timer函数是个好主意吗?再次,该方法将在一天内多次调用。

已编辑: 我已经尝试过android_alarm_manager,但不适合我的情况。 (因为我需要从回调方法中调用bloc)。而且,我不需要在后台运行我的应用程序。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

DateTime yourTime;
VoidCallback yourAction;
Timer(yourTime.difference(DateTime.now()), yourAction);

答案 1 :(得分:0)

我的应用遇到了类似的情况,我必须在一天中的某个时间触发一个事件。

我们不能使用定时器功能,因为一旦应用程序关闭,操作系统就会杀死应用程序,定时器也会停止运行。

所以我们需要在某个地方节省我们的时间,然后检查它,如果节省的时间现在已经到了。

首先,我创建了一个 DateTime 实例并将其保存在 Firestore 上。您也可以将该 DateTime 实例保存在本地数据库中,例如:SQFlite 等

//DateTime instance with a specific date and time-
DateTime atFiveInEvening;
//this should be a correctly formatted string, which complies with a subset of ISO 8601
atFiveInEvening= DateTime.parse("2021-08-02 17:00:00Z");


//Or a time after 3 hours from now
DateTime threehoursFromNow;
threeHoursFromNow = DateTime.now().add(Duration(hours: 3));

现在使用 ID 将此实例保存到 FireStore-

saveTimeToFireStore() async {
await FirebaseFirestore.instance.collection('users').doc('Z0ZuoW8npwuvmBzmF0Wt').set({
  'atFiveInEvening':atFiveInEvening,    
  });
}

现在在应用打开时从 Firestore 检索此设置时间-

getTheTimeToTriggerEvent() async {
final DocumentSnapshot doc =
    await FirebaseFirestore.instance.collection('users').doc('Z0ZuoW8npwuvmBzmF0Wt').get();
 timeToTriggerEvent= doc['atFiveInEvening'].toDate();


//Now use If/Else statement to know, if the current time is same as/or after the 
//time set for trigger, then trigger the event, 

if(DateTime.now().isAfter(timeToTriggerEvent)) {
//Trigger the event which you want to trigger.
  }
}

但是在这里我们必须一次又一次地运行函数 getTheTimeToTriggerEvent() 来检查时间是否到了。