如何将小部件构造函数作为参数传递给另一个小部件进行构建

时间:2018-11-15 00:50:54

标签: dart flutter

是否可以将一个小部件作为参数传递给另一个小部件?

我的代码与此类似,两个类型为TextWidgetBoldWidget的{​​{1}}:

ItalicWidget

在运行时,我想将abstract class TextWidget extends StatelessWidget { final String text; TextWidget({ @required this.text, }); } class BoldWidget extends TextWidget { @override Widget build(BuildContext context) { return Text(this.text, style: TextStyle(fontWeight: FontWeight.bold),); } } class ItalicWidget extends TextWidget { @override Widget build(BuildContext context) { return Text(this.text, style: TextStyle(fontStyle: FontStyle.italic),); } } 作为参数传递给另一个小部件(TextWidget),如下所示:

TextDisplay

上面的代码中无效的是class TextDisplay extends StatelessWidget { final TextWidget widget; final String string; const TextDisplay({Key key, this.widget, this.string}) : super(key: key); @override Widget build(BuildContext context) { return widget(string); } } ,并显示错误消息“'widget'不是函数”。

如何将一个小部件作为另一个参数传递,以便可以由另一个类构造它?

我的实际代码无法在将widget(string)传递给TextWidget之前构建TextDisplay,因为TextDisplay需要将某些参数应用于TextWidget

1 个答案:

答案 0 :(得分:4)

您可以使用typedef来使用CallBack模式:

  typedef CustomCallBack = TextWidget Function(String value);

  class TextDisplay extends StatelessWidget {
    final CustomCallBack widget;
    final String string;

    const TextDisplay({Key key, this.widget, this.string}) : super(key: key);

    @override
    Widget build(BuildContext context) {
      return widget(string);
    }
  }