[英]How to pass the widget as a parameter to the function
我想传递一些小部件作为功能的参数,Flutter支持吗? 下面是我的代码。 是否应该将小部件作为参数传递给功能?
这是我想作为参数传递的小部件:
class FirstWidget extends StatelessWidget {
@override
Widget build(BuildContext context){
return Container(
child: Text('i am the first'),
);
}
}
class SecondWidget extends StatelessWidget {
@override
Widget build(BuildContext context){
return Container(
child: Text('i am the second'),
);
}
}
createWidget
很重要:
class Main extends StatelessWidget {
// maybe return a widget i wanna, maybe return a default widget.
Widget _createWidget(widget){
// do something to judge
if(dosomething){
return Container(
child: Text('nothing'),
);
}
// i wanna `widget()` at this postion. not when `_createWidget`
return widget();
}
@override
Widget build(BuildContext context){
return Column(
children: <Widget>[
_createWidget(FirstWidget),
_createWidget(SecondWidget),
],
);
}
}
您可以将Widget
的实例传递给函数,然后返回它:
@override
Widget build(BuildContext context){
return Column(
children: <Widget>[
_createWidget(FirstWidget()),
_createWidget(SecondWidget()),
],
);
}
Widget _createWidget(Widget widget) {
// ... other stuff...
return widget;
}
或者,如果你想推迟建设FirstWidget()
和SecondWidget()
直到你被称为后 _createWidget()
例如,如果你想_createWidget
有条件地返回所构建的小部件),你可以使用匿名函数来创建一个形实转换 :
@override
Widget build(BuildContext context){
return Column(
children: <Widget>[
_createWidget(() => FirstWidget()),
_createWidget(() => SecondWidget()),
],
);
}
Widget _createWidget(Widget Function() widgetBuilder) {
// ... other stuff...
return widgetBuilder();
}
您可以将任何东西传递给函数。 更改您的函数定义,如下所示:
Widget _createWidget(Widget child){
// do something to judge
if(dosomething){
return Container(
child: Text('nothing'),
);
}
// Notice that you just return the variable and not call it as a function.
// return child(); <-- this one will result in an error
return child; // <-- this is the right way
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.