Flutter自定义导航按钮传路径报错:找不到路由生成器
嘿,我一眼就瞅出问题所在了,你的报错Could not find a generator for route RouteSettings("/gjuhaime", null) in the _WidgetsAppState.其实是两个小失误导致的,咱们一步步来搞定:
1. 路径参数传递完全写错了!
你调用NavigationButton的时候,把path写成了"(context, /gjuhaime)"——这完全是错误的写法!你的组件定义的path是String类型,直接传纯路径字符串就行,不需要加context和括号这些多余的东西。
错误调用:
NavigationButton( path: "(context, /gjuhaime)", btnTitle: "Gjuha ime" ),
正确调用:
NavigationButton( path: "/gjuhaime", btnTitle: "Gjuha ime" ),
2. 忘记在路由表注册目标页面了
这个报错的核心原因是Flutter不知道/gjuhaime这个路径对应哪个页面组件。你必须在项目的MaterialApp(或CupertinoApp)的routes配置里注册这个路径。
比如在你的main.dart里:
void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Your App', home: HomePage(), // 你的首页 // 关键在这里:注册路由 routes: { "/gjuhaime": (context) => GjuhaImePage(), // 替换成你实际的页面组件 // 其他路由可以在这里继续添加 }, ); } }
如果你的页面需要接收参数,也可以用onGenerateRoute来自定义路由逻辑,但基础场景下用routes注册就足够了。
额外的小优化(可选)
- 如果你用的是Flutter 2.0+的空安全版本,建议把组件构造函数里的
@required换成required关键字(更符合现代Flutter写法):
NavigationButton({required this.path, required this.btnTitle});
- 可以把所有路由路径定义成常量,避免拼写错误,比如:
class AppRoutes { static const String gjuhaime = "/gjuhaime"; // 其他路由常量... }
之后调用就可以写path: AppRoutes.gjuhaime,组件里也用这个常量,代码更规范也不容易出错。
内容的提问来源于stack exchange,提问作者lumi
相关产品推荐
相关产品推荐

