在AlarmManager中调用特定于平台的方法

时间:2019-08-21 20:52:14

标签: flutter dart

我有以下情况。我有一个每天触发一次的AlarmManager。在此警报中,我比较两个值,如果这些值相同,则会发送通知。因此,我创建了特定于平台的代码(仅限Android)来发送通知。

问题:我只能在AlarmManager之外调用方法。这意味着,如果我在没有AlarmManager的情况下将方法称为“正常”,则一切都会按预期进行。否则它将引发如下错误:

22:25:30.545 16 info flutter.tools E/flutter ( 5255): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method test on channel reminder_channel)

使用AlarmManager的代码:

main.dart

final int dailyAlarmID = 0;
await AndroidAlarmManager.initialize();

runApp(...);

await AndroidAlarmManager.oneShot(
    Duration(seconds: 15), dailyAlarmID, testMethod);
}

testMethod:

void testMethod() async {
  SharedPreferences preferences = await SharedPreferences.getInstance();
  bool testBool = preferences.getBool("darkTheme");
  print("testBool: $testBool");

  final MethodChannel platform = const MethodChannel("reminder_channel");
  final testInt = await platform.invokeMethod("test");
  print("testInt: $testInt");
}

顺便说一句,我的方法返回一个Int,即5。这仅用于测试。从共享首选项中读取testBool变量,并在两个变体中正确显示它们。

输出:

22:25:30.535 15 info flutter.tools I/flutter ( 5255): testBool: true
22:25:30.545 16 info flutter.tools E/flutter ( 5255): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method test on channel reminder_channel)

没有AlarmManager:

main.dart:

testMethod();

我只是在主方法的最后调用方法。没什么特别的。

输出:

22:41:58.054 10 info flutter.tools I/flutter ( 5564): testBool: true
22:41:58.633 12 info flutter.tools I/flutter ( 5564): testInt: 5

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

到目前为止,这是飞镖的已知问题。 请参考https://github.com/flutter/flutter/issues/56186https://github.com/flutter/flutter/issues/13937