我已按照链接上的说明在我的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/

10-10 09:30