如何在无状态小部件的构建方法中引用 widget.function()?
How do I refer to widget.function() in the build method of a stateless widget?
我正在尝试使我的 _StatefulBoyState class 中的构建方法更干净。目前,构建方法包含以下内容:
class _StatefulBoyState extends State<StatefulBoy> {
@override
Widget build(BuildContext context) {
return Container(
child: ElevatedButton(
child: Text(widget.title),
onPressed: widget.doSomething,
)
);
}
}
其中 doSomething() 和 [title] 分别是一个函数和一个字符串,它们都在 StatefulBoy 中定义 class。
但是因为我将在其他有状态小部件中使用这个确切的按钮实现,所以我想使按钮成为它自己的独立 class,如下所示:
class _StatefulBoyState extends State<StatefulBoy> {
@override
Widget build(BuildContext context) {
return Container(
child: FunctionButton(),
);
}
}
class FunctionButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
child: Text(widget.title)
onPressed: () {
widget.doSomething;
}
);
}
}
您可能已经注意到,问题是 widget.doSomething 在 FunctionButton 的主体中未定义。我应该让 FunctionButton() 成为 StatefulBoy 的 subclass 还是什么?这会破坏能够在其他有状态小部件中使用此 class 的目的。也许我在这里尝试做的事情是不可取的。如果有人能给我发一些关于这个主题的 Flutter 文档,我将不胜感激。
您应该使 FunctionButton 成为有状态的小部件,并将标题和 doSomething 传递给它。您可以查看 docs.
class _StatefulBoyState extends State<StatefulBoy> {
doSomething() {}
@override
Widget build(BuildContext context) {
return Container(
child: FunctionButton(
title: title,
function: doSomething()
),
);
}
}
class FunctionButton extends StatefulWidget {
final String title;
final Function function;
FunctionButton({Key key, this.title, this.function}) : super(key: key);
@override
_FunctionButtonState createState() => _FunctionButtonState();
}
class _FunctionButtonState extends State<FunctionButtonPage> {
@override
Widget build(BuildContext context) {
return ElevatedButton(
child: Text(widget.title)
onPressed: () {
widget.function;
}
);
}
}
我正在尝试使我的 _StatefulBoyState class 中的构建方法更干净。目前,构建方法包含以下内容:
class _StatefulBoyState extends State<StatefulBoy> {
@override
Widget build(BuildContext context) {
return Container(
child: ElevatedButton(
child: Text(widget.title),
onPressed: widget.doSomething,
)
);
}
}
其中 doSomething() 和 [title] 分别是一个函数和一个字符串,它们都在 StatefulBoy 中定义 class。
但是因为我将在其他有状态小部件中使用这个确切的按钮实现,所以我想使按钮成为它自己的独立 class,如下所示:
class _StatefulBoyState extends State<StatefulBoy> {
@override
Widget build(BuildContext context) {
return Container(
child: FunctionButton(),
);
}
}
class FunctionButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
child: Text(widget.title)
onPressed: () {
widget.doSomething;
}
);
}
}
您可能已经注意到,问题是 widget.doSomething 在 FunctionButton 的主体中未定义。我应该让 FunctionButton() 成为 StatefulBoy 的 subclass 还是什么?这会破坏能够在其他有状态小部件中使用此 class 的目的。也许我在这里尝试做的事情是不可取的。如果有人能给我发一些关于这个主题的 Flutter 文档,我将不胜感激。
您应该使 FunctionButton 成为有状态的小部件,并将标题和 doSomething 传递给它。您可以查看 docs.
class _StatefulBoyState extends State<StatefulBoy> {
doSomething() {}
@override
Widget build(BuildContext context) {
return Container(
child: FunctionButton(
title: title,
function: doSomething()
),
);
}
}
class FunctionButton extends StatefulWidget {
final String title;
final Function function;
FunctionButton({Key key, this.title, this.function}) : super(key: key);
@override
_FunctionButtonState createState() => _FunctionButtonState();
}
class _FunctionButtonState extends State<FunctionButtonPage> {
@override
Widget build(BuildContext context) {
return ElevatedButton(
child: Text(widget.title)
onPressed: () {
widget.function;
}
);
}
}