Flutter检测Navigator是否准备就绪

时间:2020-09-04 19:08:54

标签: flutter dart

使用Flutter应用程序时,我正在使用SDK进行深层链接,因此我获得了一个监听器,必须在应用程序启动后立即处理该监听器,因此必须在main()中进行。

一旦接收到深层链接,我必须根据沿深层链接数据传递的参数导航到正确的屏幕。

由于我在主要功能中收到了深层链接,因此我脱离了应用的上下文,因此要访问NavigatorState,我使用了一个导航单例,并将一个GlobalKey传递给了{{1 }}的CupertinoApp。稍后,我将使用此键来检索navigatorKey并调用push。 (而不是NavigatorState

但是,如果从深度链接打开应用,则Navigator.of(context)...很可能不包含任何东西。

如何检测/等待导航器准备就绪?

截至目前,我的方法是在navigatorKey的{​​{1}}中添加WidgetsBinding.instance.addPostFrameCallback,这解决了一个承诺,即指示App何时指向{可以使用{1}}。我敢肯定,有一种更好的方法可以实现这一目标。

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;
  }
相关问题