颤振错误“无法导航到初始路线”

Posted

技术标签:

【中文标题】颤振错误“无法导航到初始路线”【英文标题】:Flutter error "Could not navigate to initial route" 【发布时间】:2019-06-30 13:39:11 【问题描述】:

我在启动 Flutter 应用时遇到以下错误:

══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════
The following message was thrown:
Could not navigate to initial route.
The requested route name was: "/animals/cats/lolcats"
The following routes were therefore attempted:
 * /
 * /animals
 * /animals/cats
 * /animals/cats/lolcats
This resulted in the following objects:
 * MaterialPageRoute<dynamic>("/", animation: null)
 * MaterialPageRoute<dynamic>("/animals", animation: null)
 * null
 * MaterialPageRoute<dynamic>("/animals/cats/lolcats", animation: null)
One or more of those objects was null, and therefore the initial route specified will be ignored and
"/" will be used instead.
════════════════════════════════════════════════════════════════════════════════════════════════════

我已经声明了路线/animals/cats/lolcats:

'/animals': (context) => AnimalsScreen(context),
'/animals/dogs': (context) => DogsScreen(context),
'/animals/cats/lolcats': (context) => LolcatsScreen(context),

并将我的initialRoute 设置为

initialRoute: '/animals/cats/lolcats',

为什么即使声明了路由,我也会收到上述错误?

【问题讨论】:

如果路由中包含斜杠,则将其视为“深层链接”,在推送该路由之前,还会推送指向该路由的路由。例如,如果路由是 /a/b/c,那么应用程序将按顺序加载三个路由 /a、/a/b 和 /a/b/c。如果此过程的任何部分未能生成路由,则忽略 initialRoute 并改用 Navigator.defaultRouteName (/)。 所以在你的情况下 - 错误问题是 - /animals/cats/ 【参考方案1】:

我认为错误日志非常明确。

由于您使用“/”来划分路线,因此它被解释为“子路线”。 实际上它正在尝试一个接一个地通过这些路线:

* /
* /animals
* /animals/cats
* /animals/cats/lolcats

由于没有定义/animals/cats,t 出现错误,然后返回初始路由:/

如果您想解决此问题,请使用下划线重命名您的路线,如下所示: /animals_cats_lolcats 所以它不会尝试获取不存在的/animals/cats

【讨论】:

谢谢!我认为错误日志过于明确,特别是考虑到缺乏格式。像Could not navigate to initial route (have you declared all parent routes?) 这样的东西会更容易解释恕我直言。 是的 :) 实际上我对明确的事情有点太刻薄了,我同意你的格式确实有意义。无论如何很高兴提供帮助!!! 另外:您可以不带斜杠命名路由:'animals''animals_cats' 等。

以上是关于颤振错误“无法导航到初始路线”的主要内容,如果未能解决你的问题,请参考以下文章

我正在用颤振编写 Firebase 应用程序,但我收到有关 google-services.json 和初始化的错误

颤振-'initialValue == null ||控制器 == null':不正确。错误

如何在颤振测试中初始化 ScreenUtil.init()?

使用提供者值颤振初始路由

颤振构建错误 - 合并 dex 档案

颤振完成错误:ProcessException:权限被拒绝