Flutter Android 警报管理器不起作用

Gra*_*ham 3 dart flutter

我已经按照链接中的说明在我的 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 秒后调用并唤醒我的手机,但控制台没有打印任何内容,手机上也没有任何反应。出了什么问题?

Gra*_*ham 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)