Flutter Android Alarm Manager无法运作

时间:2019-01-11 15:50:50

标签: dart flutter

我已按照链接上的说明在我的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)并唤醒我的手机,但控制台上没有打印任何内容,并且手机也没有任何反应。怎么了?

1 个答案:

答案 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