我已经按照链接中的说明在我的 Flutter v1.0.0 应用程序中安装了Android 警报管理器插件。但是当我尝试使用时AndroidAlarmManager.oneShot(...)什么也没有发生。控制台中甚至没有错误。
在我的应用程序开始呈现之前,我正在使用一个FutureBuilder小部件来等待AndroidAlarmManager.initialize()未来和另一个未来:
final combinedFutures = Future.wait<void>([
gameService.asyncLoad(),
AndroidAlarmManager.initialize(),
]);
FutureBuilder<void>(
future: combinedFutures,
builder: (context, snapshot) {
...
}
)
Run Code Online (Sandbox Code Playgroud)
在FutureBuilder没有最终渲染它应该让我知道,AndroidAlarmManager.initialize()未来的回报正确。
然后在按钮的onPressed功能中我这样做:
AndroidAlarmManager.oneShot(
Duration(seconds: 5),
0,
() {
print("test");
},
wakeup: true,
);
Run Code Online (Sandbox Code Playgroud)
以上应该print(test)在 5 秒后调用并唤醒我的手机,但控制台没有打印任何内容,手机上也没有任何反应。出了什么问题?
调试库代码后,我发现,AndroidAlarmManager.oneShot函数调用的方法PluginUtilities.getCallbackHandle(callback),其中callback的函数传入在我的情况下,callback作用是:
() {
print("test");
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,PluginUtilities.getCallbackHandle在返回null时,它应该返回类型的值CallbackHandle。
查看PluginUtilities.getCallbackHandle 文档它说:
获取可在隔离之间轻松传递的命名顶级或静态回调函数的句柄。
我传递的函数不是顶级的、静态的或命名的。所以我在课堂上做了以下事情,现在一切正常:
static void alarmTest() {
print("test");
}
void runAlarm() {
AndroidAlarmManager.oneShot(
Duration(seconds: 10),
0,
alarmTest,
wakeup: true,
).then((val) => print(val));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1977 次 |
| 最近记录: |