使用auto_route嵌套导航返回方法时遇NoSuchMethodError问题
auto_route嵌套导航中TabsRouter无identifier属性的错误解决
在使用auto_route包实现嵌套导航时,出现如下错误:
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: NoSuchMethodError: Class 'TabsRouter' has no instance getter 'identifier'. E/flutter ( 5578): Receiver: Instance of 'TabsRouter'
路由配置代码如下:
@AutoRouterConfig(replaceInRouteName: "View,Route") class AppRouter extends _$AppRouter { @override List<AutoRoute> get routes => [ AutoRoute( page: HomeRoute.page, path: "/home", initial: true, children: [ AutoRoute(page: UserRoute.page, path: "user", initial: true), AutoRoute(page: SettingsRoute.page, path: "settings"), ], ), AutoRoute( page: UserDetailRoute.page, ), ]; }
错误原因及解决方法
- 错误本质:
TabsRouter是管理标签页/嵌套导航的路由对象,它本身并不提供identifier属性,你是在错误的路由实例上调用了该属性。 - 解决方式:
- 确认调用
identifier的对象是子路由对应的Router实例,比如在标签页子页面中,context.router获取的是子路由的Router对象,而非外层的TabsRouter。 - 如果需要从TabsRouter中获取当前激活子路由的
identifier,可以通过activeRouter访问子路由实例:final tabsRouter = context.tabsRouter; final activeSubRouter = tabsRouter.activeRouter; final identifier = activeSubRouter.identifier; - 排查代码中所有调用
identifier的位置,确保路由实例类型匹配,避免直接在TabsRouter上调用该属性。
- 确认调用
内容的提问来源于stack exchange,提问作者Emirhan Selim Uzun
相关产品推荐
相关产品推荐

