当前位置: 首页 > 面试题库 >

获取对InheritedWidget上下文的访问权限

南门星河
2023-03-14
问题内容

我有以下设置:

MaterialApp(home:SplashScreen)


SplashScreen(
///do some auth checks then
Navigator.of(context).push( MaterialPageRoute(
                builder: (_) =>  StateInheritedWidget(
                  user: userData,
                  child:  HomePage(),

                )))
)

然后在我HomePage的FAB中,我推了一条新路线。这条新路线无法访问我继承的窗口小部件的上下文。

是不可能InheritedWidget在新的路线中获得上下文的,还是有解决此问题的方法?

更新资料

这是我的MaterialApp的构建器属性

    builder: (context,child){
///Doing some auth stuff here
        return new StateInheritedWidget(
          user: userData,
                      child: userData==null?const SplashScreen(child: const LoginPage(),): 
                      const SplashScreen(child: const HomePage(),),

        );
      },

我的SplashScreen构建方法:

return !_load? new Scaffold(
      body: new Center(
        child: new Text('Splash'),
      ),
    ):this.widget.child;

这些是我得到的错误。

第一个似乎与Drawer我的中的有关HomePage

I/flutter (12688): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (12688): The following assertion was thrown building Tooltip("Open navigation menu", vertical offset: 24.0,
I/flutter (12688): position: below, dirty, state: _TooltipState#44ae9(ticker inactive)):
I/flutter (12688): No Overlay widget found.
I/flutter (12688): Tooltip widgets require an Overlay widget ancestor for correct operation.
I/flutter (12688): The most common way to add an Overlay to an application is to include a MaterialApp or Navigator
I/flutter (12688): widget in the runApp() call.
I/flutter (12688): The specific widget that failed to find an overlay was:
I/flutter (12688):   Tooltip("Open navigation menu", vertical offset: 24.0, position: below)
I/flutter (12688):

当我单击FAB(Navigator.push)时出现第二个异常

I/flutter (12688): Another exception was thrown: Navigator operation requested with a context that does not include a Navigator.

问题答案:

不行。这是不可能的(或至少不建议这样做)。

问题在于您的InheritedWidget不应位于路线 ,而应位于路线 上方 。通常在上面MaterialApp

但是我希望我的身份验证能够推送登录屏幕,我不能放在上面MaterialApp

这就是为什么我说usually。:D

身份验证是这些例外之一。您可能希望身份验证层访问导航器。但是仍然要与 所有 路由共享该身份验证层。

这是使用的有用属性的地方MaterialAppbuilder

通过Builder时,将用于在路线上方插入任何类型的小部件。但仍要紧追其后,Navigator以便您仍然可以在需要时推新路线。

最后,您将拥有

new MaterialApp(
  builder: (context, child) {
    return new MyAuthent(child: child);
  },
  ...
  // home: SplashSceen ?
);

这很可能需要您进行重构。但这是实现此目标的正确方法。



 类似资料:
  • 我遇到了使用文档签名 API 的第一个障碍,需要一些帮助。 我将docusignrestapi集合导入到Postman中。我设置了iKey、iSec、encodedKeys和codeFromUrl变量。 当尝试发送'01-授权代码授予访问令牌'post API时,我每次都得到以下响应。 我尝试从Postman中删除所有内容,包括环境,并从DocuSign中删除该应用程序,然后重新开始,以便我的所有

  • 我是PHP新手,我的任务是使用API从我的客户端获取数据..但问题是,即使在研究和尝试之后,我也无法理解这个API.. 我的客户给了我API的详细信息 这些只是一个虚拟值。我的客户还说,值应该是登录api的令牌响应,前面加上“Bearer”一词 做完研究后..我尝试了此代码,但浏览器上没有显示任何内容。我能做的任何想法或建议.. 我需要把这个放在纽扣上吗?抱歉,如果我在这里问,已经一天了,我不能解

  • 获取访问攻击是网络渗透测试的第二部分。 在本节中,我们将连接到网络,这将使我们能够发起更强大的攻击并获得更准确的信息。 如果网络不使用加密,我们可以连接到它并嗅出未加密的数据。 如果网络是有线的,我们可以使用电缆并连接到它,可能通过更改我们的MAC地址。唯一的问题是攻击目标使用加密,如WEP,WPA,WPA2。 如果我们确实遇到加密数据,我们需要知道解密它的密钥,这在本章将会学习和实践。 如果网络

  • 我有一些测试(我没有编写它们,我正在维护它们)使用spring ContextConfiguration注释来提供应用程序上下文: 总之,有几个问题。我不太熟悉spring自定义上下文位置,这些位置不指定file:/或classpath:/。这是什么意思?这个测试类路径上有很多同名的资源。都上膛了吗?如果不是,Spring如何知道要加载哪个? 第二,有没有一种方法可以通过编程方式访问以这种方式连接

  • 我有一个包含注入和强制(最终)字段的类。对于common,我可以使用micronatBean factory . get bean(type)或BeanContext.getBean(type)从上下文中获取bean,但是在这种情况下,我必须传递类型和参数。 我为此创建了简单的测试 对象(bean)代码 当我运行它时,我收到异常 io . micro naut . context . except

  • 好的,这是我目前的build.gradle: 这就是配置。格拉德尔: 问题是:为什么我可以从config.gradle.访问howManyTables任务,但不能访问定义的变量?我想创建具有预定义值的自定义config.gradle。然后在我的Android应用程序中使用它们作为变量。(他们,根据这些数据建立了我的逻辑。无论如何,我希望这个问题很清楚;)有什么想法吗?

  • 我正在尝试导入一个安全证书,以便按照此处的步骤向服务器发送请求。 http://www.grim.se/guide/jre-cert 我在Windows命令提示符下输入以下命令。 然后,系统会提示我输入密码,我将其输入为“changeit”。 然后这就发生了- 由于访问被拒绝,我假设我没有对JRE的写入权限。我怎么能得到这个?非常感谢。

  • X1.6.0新增 sp_get_asset_upload_path($file,$style='') 功能: 转化数据库保存的文件路径,为可以访问的url 参数: $file: 数据库保存的文件路径 $style:样式(七牛) 返回: 类型string,文件可以访问的url 使用: $url = sp_get_asset_upload_path('portal/23232.png');