我尝试实现一个重定向系统。
如果我在应用程序处于后台时收到通知(来自 Firebase 消息传递),我会将发送的路线信息(例如:redirect = /medias/details/430)存储在共享首选项中。
当应用程序打开时,我检查sharedPrefs(在主要部分),如果找到重定向字符串,我将其添加到流中:
MainSingleton().notificationStream.sink.add(redirectTo);
Run Code Online (Sandbox Code Playgroud)
在我的主页中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);
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
"Home page found a redirect request..."当我单击通知时,我收到了消息,但没有收到消息"Callback called",显然也没有收到重定向消息。
我需要再次将应用程序设置在后台,然后再次恢复它以获得重定向。
WidgetsBinding.instance不为空,所以我不知道为什么回调没有被调用。
我有什么地方说错了吗?
小智 6
我不知道 xe2x80x99 是否是一个好的解决方案或只是一个解决方法,但您可以使用它WidgetsBinding.instance!.ensureVisualUpdate来安排新的帧,因为您的应用程序当前可能不会生成任何进一步的帧并且addPostFrameCallback永远不会被调用。
MainSingleton().notificationStream.stream.listen((redirect) {\n if (redirect != null) {\n log(\xe2\x80\x9cHome page found a redirect request: going to $redirect\xe2\x80\x9d);\n WidgetsBinding.instance!.addPostFrameCallback((_) {\n log(\xe2\x80\x9cCallback called\xe2\x80\x9d);\n Application.router.navigateTo(context, redirect);\n });\n }\n WidgetsBinding.instance!.ensureVisualUpdate();\n});\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |