我现在正在使用FCM将推送通知发送到我的设备,并且运行正常。但是,当应用程序打开时,只有在该特定页面中时,我才会执行onResume。无论用户位于哪个页面(或班级),我都希望在顶部显示通知。 基本上,我希望通知在全球范围内显示(显示弹出窗口)。任何帮助,将不胜感激。这是显示通知的页面中的代码。
document.querySelector("monthDays:nth-child(day+document.querySelectorAll('.prev-date').length)").css("background-color", "yellow");
}
答案 0 :(得分:2)
将您的MaterialApp包装在包装器类中……让我们调用FCMWrapper。
class FCMWrapper extends StatefulWidget {
final Widget child;
const FCMWrapper({Key key, this.child}) : super(key: key);
@override
_FCMWrapperState createState() => _FCMWrapperState();
}
class _FCMWrapperState extends State<FCMWrapper> {
@override
Widget build(BuildContext context) {
return Consumer<YourObservable>(
builder: (context, yourObservable, _) {
if (yourObservable != null && yourObservable.isNotEmpty) {
Future(
() => navigatorKey.currentState.push(
PushNotificationRoute(
child: YourViewOnNotification(),
)),
),
);
}
return widget.child;
},
);
}
}
我将数据存储在一个单独的类中的可观察对象中。因此,当我收到通知时,我将更新可观察值。由于我们正在使用该可观察的对象,因此将调用PushNotificationRoute。
PushNotificationRoute只是扩展ModalRoute的类。
class PushNotificationRoute extends ModalRoute {
final Widget child;
PushNotificationRoute({this.child});
... //Override other methods to your requirement
//This is important
@override
Widget buildPage(BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation) {
return SafeArea(
child: Builder(builder: (BuildContext context) {
return child;
}),
);
}
...
@override
Duration get transitionDuration => Duration(milliseconds: 200);
}
现在main.dart中声明一个像这样的全局密钥
var navigatorKey = GlobalKey<NavigatorState>();
像这样包装您的MaterialApp
...
FCMWrapper(
child: MaterialApp(
navigatorKey: navigatorKey,
title: 'Your App',
...
因此,现在每次在您的可观察对象中收到通知时,都应更新并推送将在应用程序中的任何位置显示的模式路线。