我对扑朔迷离的'Widget build()'一无所知

问题描述 投票:0回答:1

flutter在混乱中,我经常看到Widget build(BuildContext context){}。到底是什么意思?

flutter
1个回答
0
投票

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

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

一般来说,有两种用例:

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

第二点有点难得。另一方面,几乎在所有地方都使用了第一点。

例如,当您要推送新路线时,将执行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)的小部件都会自动重建。

非常棒吗?

© www.soinside.com 2019 - 2024. All rights reserved.