【问题标题】:how to open a certain page using local notification in Flutter? (Not FCM)如何在 Flutter 中使用本地通知打开某个页面? (不是 FCM)
【发布时间】:2021-08-26 01:46:32
【问题描述】:

不,我不是在这里询问 Firebase Cloud Messaging 通知,而是纯粹使用来自这里的本地通知包 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,
    );
  }

  
}

【问题讨论】:

    标签: flutter flutter-local-notification


    【解决方案1】:

    我建议阅读插件文档

    根据文档

        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);
    
    • 您可以传递 onSelectNotification 函数,当用户点击通知时将调用该函数

    • 从这个功能你可以重定向到特定的屏幕示例如下

             Future selectNotification(String payload) async {
               if (payload != null) {
                 debugPrint('notification payload: $payload');
               }
               await Navigator.push(
                     context,
                     MaterialPageRoute<void>(builder: (context) => 
                     SecondScreen(payload)),);
             } 
      

    【讨论】:

    • 如何获取上下文?
    • 无论您在哪里调用插件的初始化方法,都尝试从该屏幕传递上下文
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多