代码之家  ›  专栏  ›  技术社区  ›  Alexa289

如何在Flutter中使用本地通知打开某个页面?(非FCM)

  •  0
  • Alexa289  · 技术社区  · 4 年前

    不,我不是在这里询问Firebase云消息通知,而是在这里纯粹使用本地通知包 flutter local notification

    我希望如果我的用户点击通知,那么它将被定向到某个页面。怎么做?

    目前我的代码是这样的

    class LocalNotificationService  {
      late FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin;
      LocalNotificationService._privateConstructor() {
        _init();
      }
    
      static final LocalNotificationService _instance = LocalNotificationService._privateConstructor();
      static LocalNotificationService get instance => _instance; // singleton access
    
      void _init() {
        _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
        _initializePlatformSpecifics();
      }
    
      Future<void> _initializePlatformSpecifics() async {
        var androidInitializationSettings = AndroidInitializationSettings("app_notification_icon");
        var iOSInitializationSettings = IOSInitializationSettings(
          requestAlertPermission: true,
          requestBadgePermission: true,
          requestSoundPermission: true,
          onDidReceiveLocalNotification: (id, title, body, payload) async {
            // do something if notification is clicked
          },
        );
    
        final initializationSettings = InitializationSettings(
          android: androidInitializationSettings,
          iOS: iOSInitializationSettings,
        );
    
        await _flutterLocalNotificationsPlugin.initialize(initializationSettings);
      }
    
      void showSimpleNotification({
        required String title,
        required String body,
        required NotificationType notificationType,
      }) async {
        var android = _setAndroidNotificationDetails(notificationType);
        var ios = IOSNotificationDetails();
    
        var notificationDetails = new NotificationDetails(android: android, iOS: ios);
    
        await _flutterLocalNotificationsPlugin.show(
          1, // only need to show one notification in the notification tray, so it is ok if we use the Notification ID
          title,
          body,
          notificationDetails,
        );
      }
    
      
    }
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   kishan vekariya    4 年前

    我建议阅读插件文档

    根据文件

        FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
          FlutterLocalNotificationsPlugin();
      const AndroidInitializationSettings initializationSettingsAndroid =
          AndroidInitializationSettings('app_icon');
      final IOSInitializationSettings initializationSettingsIOS =
          IOSInitializationSettings(
        requestSoundPermission: false,
        requestBadgePermission: false,
        requestAlertPermission: false,
        onDidReceiveLocalNotification: onDidReceiveLocalNotification,
      );
      final MacOSInitializationSettings initializationSettingsMacOS =
          MacOSInitializationSettings(
              requestAlertPermission: false,
              requestBadgePermission: false,
              requestSoundPermission: false);
      final InitializationSettings initializationSettings = InitializationSettings(
          android: initializationSettingsAndroid,
          iOS: initializationSettingsIOS,
          macOS: initializationSettingsMacOS);
      await flutterLocalNotificationsPlugin.initialize(initializationSettings,
          onSelectNotification: onSelectNotification);
    
    • 您可以传递SelectNotification函数,每当用户单击通知时就会调用该函数

    • 通过该函数,u可以重定向到特定的屏幕示例,如下所示

             Future selectNotification(String payload) async {
               if (payload != null) {
                 debugPrint('notification payload: $payload');
               }
               await Navigator.push(
                     context,
                     MaterialPageRoute<void>(builder: (context) => 
                     SecondScreen(payload)),);
             } 
      
        2
  •  1
  •   Moaz El-sawaf    3 年前

    首先需要创建 GlobalKey 用于导航,如下所示:

    GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
    

    和里面 MaterialApp ,将navigatorKey属性设置为我们创建的密钥,如下所示

    navigatorKey: navigatorKey
    

    现在,您可以从键的当前状态内部使用导航方法,例如:

    navigatorKey.currentState!.push()
    
    推荐文章