我已按照链接上的说明在我的Flutter v1.0.0应用程序中安装了Android Alarm Manager插件。但是,当我尝试使用AndroidAlarmManager.oneShot(...)
时,什么也没有发生。控制台中甚至没有错误。
我正在使用一个FutureBuilder
小部件来等待AndroidAlarmManager.initialize()
的将来和另一个将来,然后我的应用才开始呈现:
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)
并唤醒我的手机,但控制台上没有打印任何内容,并且手机也没有任何反应。怎么了?
答案 0 :(得分:2)
调试库代码后,我发现 A B C D
F X X X
T F X X
T T F X
T T T F
T T T T
函数调用方法AndroidAlarmManager.oneShot
,其中PluginUtilities.getCallbackHandle(callback)
是传入的函数。在我的情况下,callback
函数是:
callback
由于某种原因,() {
print("test");
}
在返回PluginUtilities.getCallbackHandle
时应返回null
类型的值。
查看CallbackHandle
documentation时会说:
获取命名的顶级或静态回调函数的句柄,可以轻松地在隔离之间进行传递。
我传递的函数不是顶级的,静态的或命名的。因此,我在课堂上做了以下操作,现在一切正常:
PluginUtilities.getCallbackHandle