BuildContext在Flutter中做什么?

BuildContext在Flutter中做什么?,第1张

BuildContext在Flutter中做什么?

BuildContext
就像其名称所暗示的那样,是构建特定小部件上下文

如果您曾经做过一些React,那么该上下文类似于React的上下文(但使用起来更顺畅);有一些奖金。

一般而言,上下文有2个用例:

  • 与您的父母互动(主要是获取/发布数据)
  • 在屏幕上渲染后,获取屏幕尺寸和位置

第二点有点罕见。另一方面,第一点几乎在所有地方都被使用。

例如,当您想推一条新路线时,您将这样做

Navigator.of(context).pushNamed('myRoute')

注意这里的上下文。它将用于获取

NavigatorState
树中上方最接近的小部件实例。然后
pushNamed
在该实例上调用该方法。


很酷,但是 什么时候要使用它?

当您想要向下传递数据 不必手动将其分配给每个小部件时,BuildContext确实有用。配置例如;
您将需要在任何地方访问它们。但是您不想在每个构造函数上传递它。

可能会创建一个整体或一个单例;但是当conf更改时,您的小部件将不会自动重建。

在这种情况下,请使用

InheritedWidget
。有了它,您可能会编写以下内容:

class Configuration extends InheritedWidget {  final String myConf;  const Configuration({this.myConf, Widget child}): super(child: child);  @override  bool updateShouldNotify(Configuration oldWidget) {    return myConf != oldWidget.myConf;  }}

然后,以这种方式使用它:

void main() {  runApp(    new Configuration(      myConf: "Hello world",      child: new MaterialApp(        // usual stuff here      ),    ),  );}

因此,您现在可以在应用程序内的 任何地方 使用来访问这些配置

BuildContext
。通过做

final configuration = context.inheritFromWidgetOfExactType(Configuration);

更酷的是,当配置更改时, 所有 调用的小部件

inheritFromWidgetOfExactType(Configuration)
都会自动重建。

很棒吧?



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

原文地址: http://outofmemory.cn/zaji/5103347.html

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

发表评论

登录后才能评论

评论列表(0条)

保存