flutter - BuildContext 在 Flutter 中做了什么?

标签 flutter

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

https://docs.flutter.dev/flutter/widgets/BuildContext-class.html只是不清楚。

https://flutter.dev/widgets-intro/#basic-widgets在术语 BuildContext 的第 9 个实例中,有一个示例,但尚不清楚它是如何使用的。它是让我迷失的更大代码集的一部分,因此我很难理解 BuildContext 是什么。

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

最佳答案

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

如果你以前做过一些 React,那么这个上下文有点类似于 React 的上下文(但使用起来更流畅);有一些奖金。

一般来说,上下文有 2 个用例:

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

第二点比较少见。另一方面,几乎所有地方都使用第一点。

例如,当您要推送新路由时,您将执行 Navigator.of(context).pushNamed('myRoute')

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


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

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

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

在这种情况下,您使用 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) 的小部件将在配置更改时自动重建。

很棒吧?

关于flutter - BuildContext 在 Flutter 中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49100196/

相关文章:

Flutter 创建一个凸起的按钮

flutter - 无法将行小部件居中

firebase - flutter + Firestore : listen for document changes

flutter - Flutter/Dart如何选择日期并使用选择填充文本字段

testing - flutter测试无法输入文字

Flutter,AppBarTheme 类的 textTheme 属性已弃用,我应该使用什么来代替?

android - 使用新的 Flutter Apk 更新 Android 应用程序 (Google Play)

Flutter - 如何在 ListView 中居中小部件

Flutter Layout : How can I put a Row inside a Flex (or another Row) in Flutter? 同样使用 Stack 小部件

dart - 如何设置 Flutter iPhone X 安全区