使用Flutter应用程序时,我正在使用SDK进行深层链接,因此我获得了一个监听器,必须在应用程序启动后立即处理该监听器,因此必须在main()
中进行。
一旦接收到深层链接,我必须根据沿深层链接数据传递的参数导航到正确的屏幕。
由于我在主要功能中收到了深层链接,因此我脱离了应用的上下文,因此要访问NavigatorState
,我使用了一个导航单例,并将一个GlobalKey
传递给了{{1 }}的CupertinoApp
。稍后,我将使用此键来检索navigatorKey
并调用push。 (而不是NavigatorState
。
但是,如果从深度链接打开应用,则Navigator.of(context)...
很可能不包含任何东西。
如何检测/等待导航器准备就绪?
截至目前,我的方法是在navigatorKey
的{{1}}中添加WidgetsBinding.instance.addPostFrameCallback
,这解决了一个承诺,即指示App
何时指向{可以使用{1}}。我敢肯定,有一种更好的方法可以实现这一目标。
答案 0 :(得分:1)
为此,我将initialRoute设置为“正在加载”屏幕,并在其中执行所有逻辑,这样我可以拥有不同的initialRoutes,而不必担心没有MediaQuery,Navigator或ThemeData。 >
但是,问题指定了一种方法来知道导航器是否可用,为此,我将使用MaterialApp / WidgetsApp / CupertinoApp的builder
函数,它用于替代导航器,如果我使用它来添加填充和全局背景色,甚至使用自定义颜色覆盖导航器小部件,
CupertinoApp(
...
builder: (context, child){
//The navigator is ready
Future.delayed(Duration.zero,
() => print(navigatorKey.currentContext)); //We use a delayed since the child needs to be returned first. It's kinda like a hack 7u7
return child;
}