Flutter: flutter_local_notifications onSelectNotification не работает при закрытии приложения

flutter_local_notifications работает нормально, когда приложение находится на переднем плане или в фоновом режиме

но когда приложение закрывается

onSelectNotification не работает должным образом, вместо этого он просто открывает приложение

      static void initializeLocalNotification() async {
    FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
        FlutterLocalNotificationsPlugin();
    const AndroidInitializationSettings initializationSettingsAndroid =
        AndroidInitializationSettings('ic_launcher');
    final IOSInitializationSettings initializationSettingsIOS =
        IOSInitializationSettings(
      requestSoundPermission: false,
      requestBadgePermission: false,
      requestAlertPermission: false,
    );

    final InitializationSettings initializationSettings =
        InitializationSettings(
      android: initializationSettingsAndroid,
      iOS: initializationSettingsIOS,
    );
    await flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onSelectNotification: (String payload) async {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      var res = await prefs.setString(kNotificationPayLoad, payload);
      // navigatorKey.currentState
      //     .push(MaterialPageRoute(builder: (_) => LoginScreen()));
      // navigatorKey.currentState.pop();
    });

    await flutterLocalNotificationsPlugin
        .resolvePlatformSpecificImplementation<
            IOSFlutterLocalNotificationsPlugin>()
        ?.requestPermissions(
          alert: true,
          badge: true,
          sound: true,
        );
  }

2 ответа

      var details = await NotificationService()
    .flutterLocalNotificationsPlugin
    .getNotificationAppLaunchDetails();
if (details.didNotificationLaunchApp) {
    print(details.payload);
}

Используйте этот код на первой странице, он может получить полезную нагрузку с уведомлением.

Вышеупомянутое решение хорошее. Но для моего приложения этого мало. Мой сценарий - после нажатия на уведомление он перенаправляется на страницу с подробностями. передний план и фон работают нормально, но проблема была в закрытом приложении. Так что мне понравилось -

Notification_plugin.dart

      Future<void> showNotification(RemoteMessage message, [bool importance = true]) async {
    dynamic notification = message.data;
    final prefs = await SharedPreferences.getInstance();

    // check message ID is valid or not
    prefs.setBool('hasMsgId', message.messageId != null ? true : false);

    await flutterLocalNotificationsPlugin.show(
      message.hashCode,
      notification['title'],
      notification['body'],
      _setPlatFormSpecificSettings(importance),
      payload: notification['docId'],
    );
}

ItemScreen.dart

      @override
void initState() {
  super.initState();
  _runWhileAppIsTerminated();
}

void _runWhileAppIsTerminated() async {
    var details = await notificationPlugin.flutterLocalNotificationsPlugin.getNotificationAppLaunchDetails();
    
    if (details.didNotificationLaunchApp) {
      if (details.payload != null) {
        final prefs = await SharedPreferences.getInstance();
        
        if (prefs.getBool('hasMsgId')) {
          prefs.remove('hasMsgId');
          
          if (prefs.get('authId').toString() != null) {
            Navigator.of(context).pushNamed(
              ItemDetailsScreen.routeName,
              arguments: details.payload,
            );
          } else {
            Navigator.of(context).pushReplacementNamed(AuthScreen.routeName);
          }
        }
      }
    }
}

Я надеюсь, что это будет полезно для всех. Спасибо!!!

Другие вопросы по тегам