导航器始终以路线“ /”开头

时间:2019-06-05 21:34:07

标签: flutter

在应用程序启动时,路线'/'会自动被推入导航器。

让我们从this官方文档示例开始。

一切正常,但是如果将'/'更改为'/home'(同时更改initiaRouteroutes),则会出现以下错误:

The requested route name was: "/home"
The following routes were therefore attempted:
* /
* /home
This resulted in the following objects:
* null
* MaterialPageRoute<dynamic>(RouteSettings("/home", null), animation: null)
 One or more of those objects was null, and therefore the initial route specified will be ignored and
"/" will be used instead.

问题1 :我明确将'/home'定义为initialRoute,为什么要坚持去'/'


我尝试通过为'/'添加空白页来解决此错误。
错误已“修复”,应用已在正确的页面上启动,但小部件树看起来像这样:
widget_tree

容器是我创建的与'/'关联的“空白页”,并且仍在被推送。更为困惑的是,它位于导航堆栈的顶部!

问题2 :为什么显示FirstScreen而不是Container

2 个答案:

答案 0 :(得分:1)

这也吸引了我。如果您查看initialRoute property的文档:

  

如果该路径包含斜杠,则将其视为“深层链接”,并且在推送此路由之前,还将推送通向该路由的路由。例如,如果路由为/ a / b / c,则该应用程序将按此顺序加载三个路由/ a,/ a / b和/ a / b / c。

该示例无法解释的是,/也被推送。因此,如果您的initialRoute/home,则它先按/,然后再按/home

(非常简单)修补程序是使用不以/开头的路由,因此在您的情况下,仅使用home:)

答案 1 :(得分:1)

实际上,它是PR所提到的一种设计。

  

此PR的主要目的是使其在您设置   初始路径,它是一个分层路径(例如/ a / b / c),   表示多次推动,对于路线的每一步(因此   ,/,/ a,/ a / b和/ a / b / c)。如果有这些   路由不存在,它回退到'/'。