簡體   English   中英

如何將小部件作為參數傳遞給函數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM