首页 > 解决方案 > 有条件的颤振前景通知

问题描述

我使用flutter null_safety 和firebase_messaging 实现了一个简单的聊天功能。

我创建了一个 notification.dart 服务来检查消息。此服务在主 dart 中调用。

当应用程序处于前台时,通知不会显示,所以我考虑使用看起来很容易使用的 overlay_support。

我现在的问题是,是否有可能检查我的实际屏幕.. 例如,我想显示一条新的聊天消息正在传入.. 但不是当我在实际屏幕上时,用户实际在写.. 但是应用程序中的其他任何地方

      _firebaseMessaging.requestPermission();

      RemoteMessage message = await _firebaseMessaging.getInitialMessage();
      if (message != null) {
        handleIncomingNavigation(message);
      }

      FirebaseMessaging.onBackgroundMessage((RemoteMessage message) async {
        handleIncomingNavigation(message);
      });

*************
      //Listen for incoming notifications in foreground
      FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
        //how to check here the current route?
        if(actualpath != ??) {
          showSimpleNotification(
            Text("New chat message from $user"),
            background: Colors.white
          );
        } else {
          //Do nothing
      });
**************

      //Listen for incoming notifications from background
      FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
        handleIncomingNavigation(message);
      });

更新:在我的 main.dart 中,我设置了 Navigatorkey:

MaterialApp(
      title: 'App',
      theme: ThemeData(primarySwatch: Colors.green),
      home: HomePage(),
      navigatorKey: NavigationService.instance.navigationKey,
    )

我的服务中没有上下文,所以我尝试使用 Navigatorkey:

      //Listen for incoming notifications in foreground
      FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        var route = 
   ModalRoute.of(NavigationService.instance.navigationKey.currentContext).settings.name;
        print(route);
      });

但这总是崩溃..

标签: flutter

解决方案


推荐阅读