我有三个问题:
扩展build
时StatelessWidget
方法的用途是什么?
为什么在覆盖build
方法之前,应覆盖它以及其中包含的内容?
build
是StatelessWidget
中的构造函数吗?
答案 0 :(得分:0)
从the documentation引述,build
方法“ [d]描述了此小部件代表的用户界面部分。”简单地说,方法允许您将其他小部件返回到构建树。例如:您可以将Text
widget返回到build
方法中,这将在用户界面中显示一些文本。您可以根据需要嵌套任意数量的小部件。
您应该覆盖它,因为它是在Flutter中显示任何类型的UI的方式。如果您不覆盖它,则您的UI中将没有任何内容。话虽如此,在Flutter中还有更多基本的渲染类可以允许您绘制单个像素,但是,这些像素也被添加到小部件树中,例如RenderObjectWidget
。
在覆盖它之前,build
方法为空。只要将您的StatelessWidget
树插入树中后进行更新,框架就会调用它。作为参数传递给build
的{{3}}为您的窗口小部件上下文提供了其在树中的位置,并允许其访问BuildContext
的树。
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
widget和build
method的更多信息。
答案 1 :(得分:0)
小部件是有状态的或无状态的。如果小部件可以更改(例如,当用户与之交互时),则该小部件是有状态的。
无状态小部件永远不会更改。 Icon,IconButton和Text是无状态窗口小部件的示例。无状态小部件子类StatelessWidget
。
有状态的小部件是动态的:例如,它可以响应用户交互触发的事件或接收数据时更改其外观。 Checkbox
,Radio
,Slider
,InkWell
,Form
和TextField
是有状态窗口小部件的示例。有状态的小部件子类StatefulWidget
。
窗口小部件的状态存储在State
对象中,以将窗口小部件的状态与其外观分开。状态由可以更改的值组成,例如滑块的当前值或是否选中了复选框。当小部件的状态发生变化时,状态对象将调用setState()
,告诉框架重新绘制小部件。
有状态窗口小部件由两个类实现: StatefulWidget和State的子类。
状态类包含小部件的可变状态和小部件的 build()方法。
当小部件的状态更改时,状态对象将调用setState(),
告诉框架重绘窗口小部件。
StatefulWidget
和StatelessWidget
是抽象类,它们
已经实现了build()
方法,并且随着您扩展
StatefulWidget
或StatelessWidget
类,您必须覆盖和
实现那些抽象类中声明的方法。