在应用程序启动时,路线'/'
会自动被推入导航器。
让我们从this官方文档示例开始。
一切正常,但是如果将'/'
更改为'/home'
(同时更改initiaRoute
和routes
),则会出现以下错误:
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,为什么要坚持去'/'
?
我尝试通过为'/'
添加空白页来解决此错误。
错误已“修复”,应用已在正确的页面上启动,但小部件树看起来像这样:
容器是我创建的与'/'
关联的“空白页”,并且仍在被推送。更为困惑的是,它位于导航堆栈的顶部!
问题2 :为什么显示FirstScreen
而不是Container
?
答案 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)。如果有这些 路由不存在,它回退到'/'。