[英]How to pass widget constructor as a parameter for another widget to build
有没有办法将一个小部件作为参数传递给另一个小部件?
我的代码具有两个TextWidget
BoldWidget
和ItalicWidget
类型的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.