在 _MaterialAppState 中找不到路由“主页”的生成器

Posted

技术标签:

【中文标题】在 _MaterialAppState 中找不到路由“主页”的生成器【英文标题】:Could not find a generator for route "home-page" in the _MaterialAppState 【发布时间】:2019-02-23 14:36:05 【问题描述】:

当我尝试在 Flutter 应用程序中从一个视图导航到另一个视图时出现异常。

I/flutter ( 2199): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter ( 2199): The following assertion was thrown while handling a gesture:
I/flutter ( 2199): Could not find a generator for route "home-page" in the _MaterialAppState.

【问题讨论】:

代码猎人,你需要分享你的代码。我想我知道答案,但我需要确认您是如何使用 Navigator.push 【参考方案1】:

使用

Navigator.push(context, new MaterialPageRoute(
  builder: (context) =>
     new MyHomePage())
  );

代替

Navigator.of(context).pushNamed('/home-page');
//or
Navigator.pushedName(context, '/home-page');

【讨论】:

这对我来说是一个解决方案;但是 push 似乎不支持将对象作为参数?有什么办法绕过这个限制吗? @cdsaenz 你明白了吗?你的意思是你想通过 MyHomePage() 方法传递一个对象,例如 new MyHomePage(fooObj) 以便在那里使用它? 现在不在我的电脑上,但我记得创建了一个类来保存参数,所以它是这样的:class PageParameters final num id; final String title; PageParameters(this.id,this.title); 抱歉格式错误,但是是的,基本上你在页面小部件中添加这个对象,然后在推送操作中将数据作为参数发送到新页面。我在这里得到了灵感link 有什么解释吗?【参考方案2】:

此消息告诉您,在路线列表中,您搜索的路线未列出。因此,请检查您的 MaterialApp->routes 中是否有您指定的路线。

【讨论】:

【参考方案3】:

试试看

  Navigator.push(context, new MaterialPageRoute(builder: (context) =>new PageName())

【讨论】:

【参考方案4】:

您需要在特定的 dart 文件中定义要跳转到下一个屏幕的路线。例如,在您的情况下,有三个屏幕: 1.mainScreen.dart 2.loginScreen.dart 3.TabScreen.dart

现在您可能已经在 mainscreen.dart 中为 Loginscreen 和 TabScreen 定义了路由,例如:

routes : <String, WidgetBuilder>
'/login' : (BuildContext context)=> LoginScreen()
'/tab' : (BuildContext context)=> TabScreen()

并且您正在尝试从 LoginScreen 跳转到 TabScreen,但您尚未在 LoginScreen.dart 中定义 TabScreen 的路由

请确保您已在 LoginScreen 中为 TabScreen 定义路由:

routes : <String, WidgetBuilder>
'/tab' : (BuildContext context)=> TabScreen()

【讨论】:

【参考方案5】:

错误提示,Could not find a generator for route "home-page" in the _MaterialAppState.。当您使用 NamedRoute (从错误消息推断)时,我认为问题出在 route 设置上。路由设置参考示例,

 MaterialApp(
    title: 'Named Routes Demo',
    initialRoute: '/',
    routes:  //route setting
      '/': (context) => FirstScreen(),
      '/home-page': (context) => HomePage(), //you should have something like this.
    ,
  )

【讨论】:

以上是关于在 _MaterialAppState 中找不到路由“主页”的生成器的主要内容,如果未能解决你的问题,请参考以下文章

Flyway:在 [classpath:db/migration] 中找不到迁移位置

在 __dict__ 中找不到 python 中的类变量

__init__.py 在同一目录中找不到模块[重复]

在 aws api 网关中找不到“GLIBC_2.18”错误

在 GCC 10.3.0 中找不到 _mm256_rem_epu64 内在函数

Python 在同一文件夹中找不到模块