当应用程序被杀死时,颤振本地通知不会重定向到相关屏幕
Posted
技术标签:
【中文标题】当应用程序被杀死时,颤振本地通知不会重定向到相关屏幕【英文标题】: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.0
和9.0.0
的两个版本上都试过这个。
【问题讨论】:
【参考方案1】:没见过这个笔记:
注意:从插件的4.0版本开始,当应用程序通过点击通知触发时,调用initialize将不会触发onSelectNotification回调。如果您需要处理触发应用程序启动的通知,请使用插件中可用的 getNotificationAppLaunchDetails 方法,例如更改应用的主路由以进行深层链接。
基于notificationAppLaunchDetails
更改initialRoute
解决了它。
final NotificationAppLaunchDetails? notificationAppLaunchDetails =
await flutterLocalNotificationsPlugin.getNotificationAppLaunchDetails();
final didNotificationLaunchApp =
notificationAppLaunchDetails?.didNotificationLaunchApp ?? false;
final initialRoute = didNotificationLaunchApp ? '/second' : '/first';
【讨论】:
以上是关于当应用程序被杀死时,颤振本地通知不会重定向到相关屏幕的主要内容,如果未能解决你的问题,请参考以下文章
使用firebase发送静默推送通知,以便在应用程序被杀死时唤醒它
当应用程序被杀死时,无法在推送通知单击时导航到特定屏幕(Flutter android)