onBackgroundMessage打开指定的页面



所以,我正在尝试处理onBackgroundMessage。我已经能够处理onMessage、onResume&onLaunch。

这是我的myBackgroundMessageHandler来处理onBackgroundMessage

static Future<dynamic> myBackgroundMessageHandler(
Map<String, dynamic> message) {}

我想在我的myBackgroundMessageHandler打开指定的页面。在onResume上,我可以进行

Data data = Data(
clickAction: message['data']['click_action'],
sound: message['data']['sound'],
status: message['data']['status'],
screen: message['data']['screen'],
extradata: message['data']['extradata'],
);
if (data.screen == "MAINTENANCE_DETAIL") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => new MaintenanceDetail(
RequestMaintenanceCode: data.extradata,
),
),
);
}

但是,当我把它复制到我的myBackgroundMessageHandler时。我收到这个错误

Error: Getter not found: 'context'.

我认为错误是因为myBackgroundMessageHandler是静态方法,所以我如何打开myBackgroundMessageHandler内部的屏幕?

onBackgroundMessage在后台工作,因此您无法导航到您的路线。最好的方法是在基类上,查看initState()上的通知。这有助于立即导航路线。我的意思是,在运行构建方法之前检查通知并导航。没有别的办法了。

@override
void initState() {
super.initState();
Future.microtask(() {
Provider.of<BaseViewBloc>(context).initFCM(); // This line check the notifications.
});

这些行有助于导航:

Future<void> onResume(Map<String, dynamic> message, context) async {
print('onResume $message');
var data = message["data"];
Navigator.pushNamed(context, NotificationContentPage.routeName,
arguments: int.parse(data["id"]));
}
Future<void> onLaunch(Map<String, dynamic> message, context) async {
print('on launch $message');
var data = message["data"];
Navigator.pushNamed(context, NotificationContentPage.routeName,
arguments: int.parse(data["id"]));
}

在应用程序主屏幕(视图(中使用:

@override
void initState() {    
FirebaseMessaging.onMessageOpenedApp.listen((fcmMessage) {
print('Firebase-> onMessageOpenedApp: message clicked');
displayMessage(fcmMessage);
});
}

其中(displayMessage(是一个显示您单击的消息的函数。这里的关键功能是(FirebaseMessaging.onMessageOpenedApp(

当用户点击您的通知时,应用程序将打开,并调用下面的方法。因此,在fcm-init方法中传递上下文,您就可以轻松地导航到适用的屏幕。

// onBackgroundMessage: myBackgroundMessageHandler,
onLaunch: (Map<String, dynamic> message) async {
if (message['data']['notification_type'] == 'sell') {
//Navigate now
}
},

相关内容

  • 没有找到相关文章

最新更新