[英]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.