flutter_background_service 未接收更新

标签 flutter dart background-process dart-isolates awesome-notifications

我正在使用awesome_notificationsflutter_background_service在从 FirebaseMessaging 接收数据通知时结合更新某些应用程序状态。正如 Awesome_notifications 中所述,后台消息处理程序必须是顶级函数,因此我使用 flutter_background_service 将数据传递到主隔离并更新应用程序状态。

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await initializeBackgroundService();
  FirebaseMessaging.onBackgroundMessage(_backgroundMessageHandler);
  _initLocalNotifications();
  runApp(MyApp());
}

我正在初始化后台服务,类似于 flutter_background_service 中的示例:

Future<void> initializeBackgroundService() async {
  final service = FlutterBackgroundService();
  await service.configure(
    androidConfiguration: AndroidConfiguration(
      onStart: onStart,
      autoStart: true,
      isForegroundMode: true,
    ),
    iosConfiguration: IosConfiguration(
      autoStart: true,
      onForeground: onStart,
      onBackground: onIosBackground,
    ),
  );
  await service.startService();
}

并在收到通知时调用 _backgroundMessageHandler 中的更新:

Future<void> _backgroundMessageHandler(
  RemoteMessage message,
) async {
  final service = FlutterBackgroundService();

  ...

  service.invoke('update', {
    'key1': 'val1',
    'key2': 'val2',
  });
}

在主隔离中我的应用程序的 StatefulWidget 中,我正在监听更新调用以接收数据:

void listenForNotificationData() {
  final backgroundService = FlutterBackgroundService();
  backgroundService.on('update').listen((event) async {
    print('received data message in feed: $event');
  }, onError: (e, s) {
    print('error listening for updates: $e, $s');
  }, onDone: () {
    print('background listen closed');
  });
}

它永远不会调用“更新”事件的监听回调。我可以确认它正在调用 invoke('update') 部分并调用 on('update').listen,但从未收到更新。它似乎也没有出错。我在这里错过了某个步骤吗?

最佳答案

我在 flutter 后台服务上遇到了同样的问题。我通过从回调中删除 async 关键字并创建一个单独的异步函数来执行回调操作来解决这个问题。

void listenForNotificationData() {
  final backgroundService = FlutterBackgroundService();
  backgroundService.on('update').listen((event) {
    print('received data message in feed: $event');
  }, onError: (e, s) {
    print('error listening for updates: $e, $s');
  }, onDone: () {
    print('background listen closed');
  });
}

void action(Map? event) async {
print('received data message in feed: $event');
}

希望对你有帮助,如有语法错误请见谅

关于flutter_background_service 未接收更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71812571/

相关文章:

flutter - 像工厂一样使用 Provider

dart - 多个小部件与 TabController 使用相同的 GlobalKey

php - 即使从 a/c 注销,提交表单后 php 脚本将如何在后台运行

dart - 如何将类型传递给函数并调用其静态方法?

dart - 如何从 redux_epic 调用错误操作?

c# - WPF 4.5 : How to create child thread and continue task to UI main thread?

android - 当启动 Activity 在它仍在运行时停止/销毁时,AsyncTask 会发生什么?

flutter - 省略局部变量的类型注释

flutter - 将 flutter GridView 中的最后一行项目居中

image - 即使在pubspec.yaml Flutter中指定了 Assets ,也不会在GridView中显示图像