flutter firebase消息处理在后台单击通知

wn9m85ua  于 2023-01-31  发布在  Flutter
关注(0)|答案(1)|浏览(197)

我正在使用flutter应用程序上的firebase_messaging包,它可以完美地工作,除了当应用程序在后台,我得到一个通知,它只打开应用程序,从来没有做什么,我要求它打开应用程序后做。

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  // If you're going to use other Firebase services in the background, such as Firestore,
  // make sure you call `initializeApp` before using other Firebase services.
  await Firebase.initializeApp();

  print("Handling a background message: ${message.messageId}");
  final dynamic data = message.data;
  print("data is $data");
  if(data.containsKey('request_id')) {
    print("we are inside ..!");
    RegExp exp = RegExp(r'\d+');
    var id = int.parse(exp.firstMatch(data['request_id']!)!.group(0)!);
    OpenRequestsController openRequestsController = Get.isRegistered<OpenRequestsController>()?Get.find():Get.put(OpenRequestsController());
    OpenRequest matchingRequest = openRequestsController.openRequestsList.firstWhere((request) => request.id == id);
    print("the request from the list is $matchingRequest");
    openRequestsController.openRequestDetails(matchingRequest,false);

  }
}

这里发生的是,它试图运行整个功能时,消息被接收,而不是当点击。和ofc它失败,因为应用程序还没有在前台运行

cuxqih21

cuxqih211#

要打开应用程序并移动到上述屏幕,您需要在第一个有状态小部件的initstate中实现onMessageOpenedApp,这将让应用程序知道它应该在单击通知时打开应用程序。代码函数应如下所示:

FirebaseMessaging.onMessageOpenedApp.listen((message) {
  Get.to(() => const MainScreen()); // add logic here
});

如果您可以为您希望在发送通知时单击特定通知时打开的屏幕类型分配标识符,并根据消息类型在此处实现if-else或switch语句,则效果会更好。
谢谢

相关问题