StatelessWidget中的构建方法是什么

时间:2019-06-22 06:58:12

标签: flutter dart

我有三个问题:

  1. 扩展buildStatelessWidget方法的用途是什么?

  2. 为什么在覆盖build方法之前,应覆盖它以及其中包含的内容?

  3. buildStatelessWidget中的构造函数吗?

2 个答案:

答案 0 :(得分:0)

  1. the documentation引述,build方法“ [d]描述了此小部件代表的用户界面部分。”简单地说,方法允许您将其他小部件返回到构建树。例如:您可以将Text widget返回到build方法中,这将在用户界面中显示一些文本。您可以根据需要嵌套任意数量的小部件。

  2. 您应该覆盖它,因为它是在Flutter中显示任何类型的UI的方式。如果您不覆盖它,则您的UI中将没有任何内容。话虽如此,在Flutter中还有更多基本的渲染类可以允许您绘制单个像素,但是,这些像素也被添加到小部件树中,例如RenderObjectWidget
    在覆盖它之前,build方法为。只要将您的StatelessWidget树插入树中后进行更新,框架就会调用它。作为参数传递给build的{​​{3}}为您的窗口小部件上下文提供了其在树中的位置,并允许其访问BuildContext的树。

  3. 否,StatelessWidget的构造函数是常规的InheritedWidget,并且允许您将变量作为参数。例如:您有一个名为StatelessWidget的{​​{1}},并且想要向该窗口小部件传递 title 。这就是您使用构造器并通过在 MyTitleWidget方法中返回一个Text小部件并查找字体大小和使用继承的Dart constructor的标题的常规样式:
build

请注意,该示例中的class MyTitleWidget extends StatelessWidget { final String title; const MyTitleWidget({Key key, this.title}) : super(key: key); @override Widget build(BuildContext context) => Text( title, style: Theme.of(context).textTheme.title, ); } 不是强制性的,但是,好的做法是始终允许您在树中为此窗口小部件分配唯一的标识符。

通过遵循相应的链接,您可以大致了解Theme widgetbuild method的更多信息。

答案 1 :(得分:0)

有状态和无状态小部件

根据flutter docs

小部件是有状态的或无状态的。如果小部件可以更改(例如,当用户与之交互时),则该小部件是有状态的。

无状态小部件永远不会更改。 Icon,IconButton和Text是无状态窗口小部件的示例。无状态小部件子类StatelessWidget

有状态的小部件是动态的:例如,它可以响应用户交互触发的事件或接收数据时更改其外观。 CheckboxRadioSliderInkWellFormTextField是有状态窗口小部件的示例。有状态的小部件子类StatefulWidget

窗口小部件的状态存储在State对象中,以将窗口小部件的状态与其外观分开。状态由可以更改的值组成,例如滑块的当前值或是否选中了复选框。当小部件的状态发生变化时,状态对象将调用setState(),告诉框架重新绘制小部件。

  • 有状态窗口小部件由两个类实现: StatefulWidget和State的子类。

  • 状态类包含小部件的可变状态和小部件的 build()方法。

  • 当小部件的状态更改时,状态对象将调用setState(),
    告诉框架重绘窗口小部件。

  • StatefulWidgetStatelessWidget是抽象类,它们 已经实现了build()方法,并且随着您扩展 StatefulWidgetStatelessWidget类,您必须覆盖和 实现那些抽象类中声明的方法。