Flutter页面导航报错:type 'String' is not a subtype of type 'Route<Object?>'
解决方案:type 'String' is not a subtype of type 'Route<Object?>' in type cast
这个错误的核心原因是路由配置存在问题,框架试图将字符串(而非合法的Route对象)转换为Route类型,导致类型转换失败。以下是具体修复步骤:
检查路由注册是否正确
在你的MaterialApp(或CupertinoApp)配置中,确保命名路由/home的映射关系是返回Widget的builder函数,而非字符串:// 正确的路由注册示例 MaterialApp( routes: { '/home': (context) => HomePage(), // 这里必须返回Widget的builder '/cart': (context) => CartPage(), }, )如果你使用
onGenerateRoute动态生成路由,确保返回的是MaterialPageRoute这类Route子类,而非字符串:MaterialApp( onGenerateRoute: (settings) { if (settings.name == '/home') { return MaterialPageRoute(builder: (context) => HomePage()); // 正确返回Route对象 } // 其他路由处理逻辑 return MaterialPageRoute(builder: (context) => NotFoundPage()); }, )错误的路由配置(比如把路由映射到字符串)会直接触发这个类型转换报错。
确认Navigator调用逻辑
你当前的Navigator.pushNamedAndRemoveUntil(context, '/home', (route) => false);写法本身是正确的——它会跳转到首页,并清空之前的路由栈(实现无法返回购物车的需求)。只要路由注册正确,这个方法就能正常工作。额外排查点
确保调用Navigator时使用的context是包含Navigator的上下文(比如页面组件的context,而非MaterialApp本身的context),否则可能导致路由查找异常。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

