如何在通知到达时在任何屏幕上显示自定义对话框?
Posted
技术标签:
【中文标题】如何在通知到达时在任何屏幕上显示自定义对话框?【英文标题】:How to show a custom dialog in any screen in when notification arrived flutter? 【发布时间】:2019-12-07 13:12:13 【问题描述】:当推送通知到达我的应用程序时,我试图在任何活动屏幕中显示一个对话框。在应用程序运行时。我可以通过用户交互显示对话框,例如单击按钮。但我想在没有用户交互的情况下展示它。如果有通知到达,则仅应触发对话。我正在尝试使用后台获取来调用它。但找不到任何解决方案。所以,请帮助并提前感谢您。
【问题讨论】:
【参考方案1】:我之前遇到过同样的问题,我会展示我的解决方案,希望它适合你
解决方案的主要内容:我们的页面没有弹出 当应用程序像主页一样生活时导航器堆栈,因此我们可以使用此页面中的 BuildContext
所以通过 context 我的 StatefulWidget(Like Home Page) 谁 必须仍然在 Navigator 的堆栈中(当应用程序运行时不弹出它)给你的类来处理通知数据,你可以用它来显示对话框
现在写一些代码:
例如,我们有 NotificationManger 类,该类用于使用 static 方法处理通知消息
class NotificationManger
static BuildContext _context;
static init(@required BuildContext context)
_context = context;
//this method used when notification come and app is closed or in background and
// user click on it, i will left it empty for you
static handleDataMsg(Map<String, dynamic> data)
//this our method called when notification come and app is foreground
static handleNotificationMsg(Map<String, dynamic> message)
debugPrint("from mangger $message");
final dynamic data = message['data'];
//as ex we have some data json for every notification to know how to handle that
//let say showDialog here so fire some action
if (data.containsKey('showDialog'))
// Handle data message with dialog
_showDialog(data);
static _showDialog(@required Map<String, dynamic> data)
//you can use data map also to know what must show in MyDialog
showDialog(context: _context,builder: (_) =>MyDialog());
现在我们在我的应用程序的类 FCM 中将此回调作为***或静态(必须是其中之一)
class Fcm
static final FirebaseMessaging _fcm = FirebaseMessaging();
static initConfigure()
if (Platform.isios) _iosPermission();
_fcm.requestNotificationPermissions();
_fcm.autoInitEnabled();
_fcm.configure(
onMessage: (Map<String, dynamic> message) async =>
NotificationManger.handleNotificationMsg(message),
onLaunch: (Map<String, dynamic> message) async =>
NotificationManger.handleDataMsg(message['data']),
onResume: (Map<String, dynamic> message) async =>
NotificationManger.handleDataMsg(message['data']),
onBackgroundMessage: async =>
NotificationManger.handleDataMsg(message['data']);
static _iosPermission()
_fcm.requestNotificationPermissions(
IosNotificationSettings(sound: true, badge: true, alert: true));
_fcm.onIosSettingsRegistered.listen((IosNotificationSettings settings)
print("Settings registered: $settings");
);
更多关于回调 fcm 的信息请阅读this
现在在我们的 HomePage 状态中很好地在 initState 方法中初始化我们的类
@override
void initState()
super.initState();
Future.delayed(Duration.zero,()
///init Notification Manger
NotificationManger.init(context: context);
///init FCM Configure
Fcm.initConfigure();
);
如前所述,当应用程序显示时主页不会弹出,您可以启动另一个页面但不关闭主页
希望对你有帮助
【讨论】:
我爱你,兄弟。如果你是个女孩,我会嫁给你。非常感谢您的解决方案。 @JayantDhingra hhhhh 对不起兄弟我是个男人,祝婚姻好运在另一个答案中:P @JayantDhingra 我没有看到对话框,谁能告诉我该怎么做? @MahmoudAbuElheja 感谢您的出色回答!设备锁定时是否可以显示此对话框?以上是关于如何在通知到达时在任何屏幕上显示自定义对话框?的主要内容,如果未能解决你的问题,请参考以下文章
到达屏幕结束时在 UITableView 自定义单元格中包装文本(Swift)