Flutter 自动路由错误“...必须是 AutoRouter 小部件的后代小部件。”

问题描述 投票:0回答:1

我明白问题,但不知道解决办法,有人可以帮忙吗?

在 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 代码才能工作呢?

flutter routes
1个回答
0
投票

如果我理解正确,您可以稍微简化您的设置以避免额外的嵌套(

MaterialApp.router
MaterialApp
)。这就是您为所有页面提供单一上下文的方式:

@override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: _appRouter.config(),
      builder: (context, router) {
        return Scaffold(
          endDrawer: MenuDrawer(),
          body: router,
        );
      },
    );
  }
© www.soinside.com 2019 - 2024. All rights reserved.