BuildContext是做什么的,我们从中得到了什么信息?

https://docs.flutter.io/flutter/widgets/BuildContext-class.html是不清楚的.

在术语BuildContext的第9个实例中有一个例子,但不清楚它是如何使用的.它是一个更大的代码集的一部分,它让我迷失了方向,所以我很难理解BuildContext到底是什么.

有人能用简单/非常基本的术语解释一下吗?

推荐答案

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

如果您以前做过一些React,那么该上下文与React的上下文类似(但使用起来更流畅);还有一些 prize .

一般来说,上下文有两种用例:

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

第二点很少见.另一方面,第一点几乎无处不在.

例如,当您想要推送一条新路由时,您需要做Navigator.of(context).pushNamed('myRoute')次.

请注意这里的上下文.它将用于获取树中最接近的NavigatorState个小部件的实例.然后在该实例上调用方法pushNamed.


Cool, but when do 100 want to use it ?

例如,当您想要向下传递数据without时,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
      ),
    ),
  );
}

多亏了这一点,现在你的应用程序中有everywhere,你可以使用BuildContext来访问这些配置.通过做

final configuration = context.inheritFromWidgetOfExactType(Configuration);

更酷的是,当配置发生变化时,all个调用inheritFromWidgetOfExactType(Configuration)的小部件将自动重建.

太棒了,对吧?

Flutter相关问答推荐

如何从模型列表中生成DropdownButtonFormField?

SingleChildScrollView正在将Container的高度限制为子对象,尽管使用了Expanded Inside Row()

如何在Firebase项目中更改包名称和包ID

当键盘在抖动中打开时,如何才能看到包装在SingleChildScrollView中的列中的最后一个小工具?

设置Flutter 中的ListView.Builder()的最小高度

如何在Date Time类中只显示日期?

如何在Flutter 中创造以下效果

带有附加图像的ListTile

Flutter 火焰相机抖动已弃用

如何动态获取任何小部件的像素?

splash_screen 没有被推送到登录页面

使 Row 中的元素保持在中间的空间,如果它们太大,则将它们包裹起来

如何在 Flutter (iOS) 中解决这个问题

Flutter - 展开图标无法正常工作

如何使这种相机叠加在Flutter 中?

如何在 flutter 的 onChanged(更改字符)处更改 TextField 边框 colored颜色 ?

String类型不是Widget类型的子类型?在dart 中

TextSpan 避免符号字符串组上的换行符

如何在Flutter 中制作自定义微调器?

在Flutter 中将数字转换为印度文字样式