我尝试实现一个重定向系统。
如果我的应用程序在后台接收到来自Firebase消息的通知,我会将发送路由信息(例如:redirect = /medias/details/430
)存储在共享首选项中。
当应用程序打开时,在主要代码中检查sharedPrefs并且如果找到重定向字符串,则将其添加到流中:
MainSingleton().notificationStream.sink.add(redirectTo);
在我的首页的
initState
中,我检查流中是否有重定向,如果是这种情况,我会使用以下方式将用户重定向到正确的页面: void initState() {
super.initState();
MainSingleton().notificationStream.stream.listen((redirect) {
if (redirect != null) {
log("Home page found a redirect request: going to $redirect");
WidgetsBinding.instance!.addPostFrameCallback((_) {
log("Callback called");
Application.router.navigateTo(context, redirect);
});
}
});
}
当我点击通知时,收到了消息"主页发现重定向请求..."
,但没有收到"回调被调用"
,显然也没有进行重定向。
我需要再次将应用程序置于后台,并恢复它第二次才能获得重定向。
WidgetsBinding.instance
不为null,所以我不知道为什么没有调用回调。
我哪里错了吗?