【问题标题】:Flutter local notifications doesn't redirect to relevant screen when app is killed当应用程序被杀死时,颤振本地通知不会重定向到相关屏幕
【发布时间】:2021-11-25 20:10:15
【问题描述】:

我在 Flutter 应用中使用 flutter_local_notifications 来安排在特定时间发出通知。

当我点击通知时,当应用程序运行时,它会按预期工作并进入相关屏幕;但是当应用程序被杀死时点击通知时,它会转到主屏幕。

因为,这个通知是自动安排的,而不是用户操作,我是在一个函数而不是小部件中做的。所以,我没有context。为了解决这个问题,我使用 GlobalKey 类型的 NavigatorState

final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
navigatorKey.currentState?.push(MaterialPageRoute(builder: (ctx) {
  return Scaffold(
    appBar: AppBar(
      title: Text('notification clicked'),
    ),
  );
}));

我尝试的第二种方法是使用有状态小部件

class Noti extends StatefulWidget {
  const Noti({Key? key}) : super(key: key);
  @override
  NotiState createState() => NotiState();
}

class NotiState extends State<Noti> {
  @override
  void initState() {
    super.initState();
    initNotification();
  }

  Future initNotification() async {
    const AndroidInitializationSettings initializationSettingsAndroid =
        AndroidInitializationSettings('bolt');
    final InitializationSettings initializationSettings =
        InitializationSettings(android: initializationSettingsAndroid);

    flutterLocalNotificationsPlugin.initialize(
      initializationSettings,
      onSelectNotification: selectNotification,
    );
    const notDetails = NotificationDetails(
        android: AndroidNotificationDetails('1', 'Scheduled Review',
            channelDescription: 'Review reminders at scheduled time'));
    flutterLocalNotificationsPlugin.periodicallyShow(1, 'Scheduled Review',
        'Every Minute', RepeatInterval.everyMinute, notDetails);
  }

  Future selectNotification(String? payload) async {
    Navigator.push(context, MaterialPageRoute(builder: ((ctx) {
  return Scaffold(
    appBar: AppBar(
      title: Text('notification clicked'),
    ),
  );
})));
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

这个Noti 小部件我插入到我主页的随机位置,以便调用它的initState

同样的事情也发生在这里;即,在应用程序死机时单击通知时,我会被重定向到主屏幕,而不是标题为 notification clicked 的屏幕,就像这里的逻辑一样。当应用程序处于活动状态时,它可以正常工作。 我在上述库的8.2.09.0.0 的两个版本上都试过这个。

【问题讨论】:

    标签: android flutter push-notification android-notifications


    【解决方案1】:

    没见过这个笔记:

    注意:从插件的4.0版本开始,当应用程序通过点击通知触发时,调用initialize将不会触发onSelectNotification回调。如果您需要处理触发应用程序启动的通知,请使用插件中可用的 getNotificationAppLaunchDetails 方法,例如更改应用的主路由以进行深层链接。

    基于notificationAppLaunchDetails 更改initialRoute 解决了它。

    final NotificationAppLaunchDetails? notificationAppLaunchDetails =
          await flutterLocalNotificationsPlugin.getNotificationAppLaunchDetails();
      final didNotificationLaunchApp =
          notificationAppLaunchDetails?.didNotificationLaunchApp ?? false;
    final initialRoute = didNotificationLaunchApp ? '/second' : '/first';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      相关资源
      最近更新 更多