我明白问题,但不知道解决办法,有人可以帮忙吗?
在 main.dart 中,我有一个带有抽屉菜单的支架。抽屉菜单提供了指向“关于”页面的链接。
builder: (BuildContext context, themeProvider, child) {
return MaterialApp(
home: Scaffold(
endDrawer: MenuDrawer(),
(...在 main.dart 支架的主体中,我有我的自动路由器路由器信息...)
body: MaterialApp.router(
routerConfig: _appRouter.config(),
),
), //end Scaffold
); //end MaterialApp
这会加载我的初始路线(主页)。
在菜单抽屉内,“关于”按钮链接的编码如下:
OutlinedButton(
child: const Text("ABOUT PAGE"),
onPressed: () {
context.router.pushNamed('/about');
},
),
....但是当我按下此按钮时,我收到错误:
══╡手势引发的异常
处理手势时抛出以下断言: 使用不包含以下内容的上下文请求 AutoRouter 操作 自动路由器。用于检索路由器的上下文必须是 是 AutoRouter 小部件的后代的小部件。
据我了解,这是因为菜单抽屉位于主体中,而不是“home”主体中。但我不想为每个特定页面提供一个菜单(或为每个页面提供一个应用栏和菜单)...我只想要一个位于所有页面之上的菜单。那么我该如何修改我的 onPressed 代码才能工作呢?
如果我理解正确,您可以稍微简化您的设置以避免额外的嵌套(
MaterialApp.router
内MaterialApp
)。这就是您为所有页面提供单一上下文的方式:
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: _appRouter.config(),
builder: (context, router) {
return Scaffold(
endDrawer: MenuDrawer(),
body: router,
);
},
);
}