繁体   English   中英

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

[英]How to pass widget constructor as a parameter for another widget to build

有没有办法将一个小部件作为参数传递给另一个小部件?

我的代码具有两个TextWidget BoldWidgetItalicWidget类型的BoldWidget 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(string) ,错误消息为“'widget'不是函数”。

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

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

您可以使用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);
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM