flutter - 在 Flutter 推送通知中转到应用页面
问题描述
我对 Flutter 应用程序的通知有疑问。我想将用户从通知重定向到特定页面。我现在有这样的事情:
void initState() {
super.initState();
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
_goToMessage(message);
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
_goToMessage(message);
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
_goToMessage(message);
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(
sound: true, badge: true, alert: true, provisional: true));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
_firebaseMessaging.getToken().then((String token) {
print("Push Messaging token: $token");
});
}
void _goToMessage(message) {
Navigator.pushNamed(context, DidacticList.routeName);
}
这段代码给了我一个错误:
Navigator operation requested with a context that does not include a Navigator
。
收到推送通知代码onLaunch()
或onResume()
执行后。
解决方案
您可以在初始化推送通知时从 main.dart 传递上下文,如下所示。
把它放在 MaterialApp Widget 的构建方法中。
// init Firebase Push Notification Service...
PushNotificationsManager(context).init();
BuildContext 初始化后,您可以根据自己的选择使用它。
这是 PushNotificationsManager 类供您参考。
class PushNotificationsManager {
bool _initialized = false;
static BuildContext _context;
Stream<RemoteMessage> _receivedMessages;
PushNotificationsManager._(_context);
factory PushNotificationsManager(BuildContext context) {
_context = context;
return _instance;
}
static final PushNotificationsManager _instance =
PushNotificationsManager._(_context);
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
Future<void> init() async {
if (!_initialized) {
await _firebaseMessaging.requestPermission();
_receivedMessages = FirebaseMessaging.onMessageOpenedApp;
// * Implement on Background Message like follwing...
// FirebaseMessaging.onBackgroundMessage((message) => );
// TODO : Implement on message received...
_receivedMessages.listen((message) {});
_initialized = true;
}
}
}
您可以使用listen 或onBackgroundMessage 方法在导航点击时导航到任何页面。
推荐阅读
- amazon-web-services - 获取“请求中包含的安全令牌无效。” 尝试获取 s3 的预签名 URL 时
- azure-devops - 管理 Azure DevOps BurnDown
- python - 来自未来的币安 API 答案
- python - 向 Windows 中的交互式终端发送命令
- typescript - 开玩笑,打字稿找不到模块'@forge/bridge'
- flutter - 如何使用颤振更改 google_sign_in 的名称和徽标?
- python - Scrapy Image Pipeline不下载图像
- python - 如何根据年龄对该列表进行排序
- c# - 如何在 Android 上的 Unity 中禁用用于屏幕截图的游戏对象?
- c# - 如果有人在哪里发送垃圾邮件,如何摆脱 ReadKey() 问题?