我已按照链接上的说明在我的Flutter v1.0.0应用程序中安装了Android Alarm Manager插件。但是,当我尝试使用AndroidAlarmManager.oneShot(...)
时,什么也没有发生。控制台中甚至没有错误。
我正在使用FutureBuilder
小部件来等待AndroidAlarmManager.initialize()
future和另一个future,然后再开始渲染我的应用:
final combinedFutures = Future.wait<void>([
gameService.asyncLoad(),
AndroidAlarmManager.initialize(),
]);
FutureBuilder<void>(
future: combinedFutures,
builder: (context, snapshot) {
...
}
)
FutureBuilder
最终呈现了它应该呈现的内容,因此我知道AndroidAlarmManager.initialize()
将来会正确返回。然后在按钮的
onPressed
函数中,我这样做:AndroidAlarmManager.oneShot(
Duration(seconds: 5),
0,
() {
print("test");
},
wakeup: true,
);
上面的代码应该在5秒钟后调用
print(test)
并唤醒我的手机,但控制台上没有打印任何内容,并且手机上没有任何反应。怎么了? 最佳答案
在调试库代码之后,我发现AndroidAlarmManager.oneShot
函数调用了PluginUtilities.getCallbackHandle(callback)
方法,其中callback
是传入的函数。在我的情况下,callback
函数是:
() {
print("test");
}
由于某些原因,
PluginUtilities.getCallbackHandle
应该返回null
类型的值时返回CallbackHandle
。查看
PluginUtilities.getCallbackHandle
documentation它说:我传递的函数不是顶级的,静态的或命名的。所以我在类里面做了以下工作,现在一切正常:
static void alarmTest() {
print("test");
}
void runAlarm() {
AndroidAlarmManager.oneShot(
Duration(seconds: 10),
0,
alarmTest,
wakeup: true,
).then((val) => print(val));
}
关于dart - Flutter Android Alarm Manager无法运作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54149840/