【发布时间】: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 的两个版本上都试过这个。
【问题讨论】:
标签: android flutter push-notification android-notifications