如何在无状态小部件的构建方法中引用 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;
      }
    );
  }
}