flutter – 使用Scaffold作为子项的InheritedWidget似乎不起作用

flutter – 使用Scaffold作为子项的InheritedWidget似乎不起作用,第1张

概述我希望在我的Flutter应用程序的根级别使用InheritedWidget,以确保所有子窗口小部件都可以使用经过身份验证的用户的详细信息.基本上让脚手架成为IW的孩子,就像这样: @overrideWidget build(BuildContext context) {return new AuthenticatedWidget( user: _user, child: ne 我希望在我的Flutter应用程序的根级别使用inheritedWidget,以确保所有子窗口小部件都可以使用经过身份验证的用户的详细信息.基本上让脚手架成为IW的孩子,就像这样:

@overrIDeWidget build(BuildContext context) {return new AuthenticatedWidget(    user: _user,child: new Scaffold(      appbar: new Appbar(        Title: 'My App',),body: new MyHome(),drawer: new MyDrawer(),));}

这在app开始时按预期工作,所以表面看来我在AuthenticatedWidget中正确实现了inheritedWidget模式,但是当我从其他地方返回主页(MyHome)时:

Navigator.popAndPushnamed(context,'/home');

在MyHome的构建方法中调用(之前有效)然后导致authWidget为null:

final authWidget = AuthenticatedWidget.of(context);

完全可能我错过了如何正确实现IW的一些细微差别,但同样,它确实最初工作,我也看到其他人提出同样的问题(即“继承的小部件”标题下的here).

因此,不能使用Scaffold或MaterialApp作为inheritedWidget的子级吗?或者这可能是一个提出的错误?提前致谢!

解决方法 这是许多人在开始颤抖时难以理解的问题.

Myinherited.of(context)将基本上查看当前上下文的父级,以查看是否存在Myinherited实例化.

问题是:您继承的窗口小部件在当前上下文中实例化.

=>没有Myinherited作为父母

=>紧急

诀窍是使用不同的上下文.
那里有很多解决方案.您可以在另一个窗口小部件中实例化Myinherited,以便构建方法的上下文将Myinherited作为父窗口.

或者你可以使用Builder来引入一个虚假的小部件,它会传递给你它的上下文.

建造者的例子:

return new MyinheritedWidget(  child: new Builder(    builder: (context) => new Scaffold(),);

出于同样的原因,另一个问题是,如果在路由中插入inheritedWidget,它将不在此路由之外.

解决方案很简单!
将MyinheritedWidget放在MaterialApp上方.

以上材料:

new Myinherited(  child: new MaterialApp(    // ...  ),)
总结

以上是内存溢出为你收集整理的flutter – 使用Scaffold作为子项的InheritedWidget似乎不起作用全部内容,希望文章能够帮你解决flutter – 使用Scaffold作为子项的InheritedWidget似乎不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1000489.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存