Flutter stateleswidget返回列表

时间:2018-12-21 07:03:06

标签: dart flutter

我正在将我以前在函数中拥有的内容移到无状态小部件中。我想知道是否可以返回带有Widget类型的列表,如果可以的话我该怎么做?

我尝试了一些随机操作,这些操作只会进一步破坏我的应用程序。

class returnList1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return <Widget>[
      InfoCard(),
      InfoCard(),
      InfoCard(),
      Stack(
        children: <Widget>[
          IconButton(
            icon: Icon(Icons.more_horiz),
            iconSize:
                35.0, // TODO: scale icons based on mediaquery height and width
            color: Colors.black,
            onPressed: () {
              print("More Pressed!");
            },
          ),
          Padding(
            padding: EdgeInsets.fromLTRB(
                MediaQuery.of(context).size.width * 0.034,
                MediaQuery.of(context).size.height * 0.02839,
                0.0,
                0.0),
            child: Material(
              color: Colors.transparent,
              elevation: 7.5,
              borderRadius: BorderRadius.circular(200.0),
              child: Container(
                height: MediaQuery.of(context).size.height * 0.009675,
                width: MediaQuery.of(context).size.width * 0.0559,
                color: Colors.transparent,
              ),
            ),
          ),
        ],
      )
    ];
  }
}

运行代码时,我得到“在null上调用了getter'length'。在我的IDE中,我得到了“返回类型'List'不是'Widget',如方法'build所定义'。”

1 个答案:

答案 0 :(得分:1)

您无法使用build方法返回列表。 build方法只能返回Widget。 如果要返回列表,则可以创建一个函数并返回一个可以在任何“多个子容器”的子属性中使用的列表。

这是代码。

    _returnList (BuildContext context) {
    return [
      InfoCard(),
      InfoCard(),
      InfoCard(),
      Stack(
        children: <Widget>[
          IconButton(
            icon: Icon(Icons.more_horiz),
            iconSize:
            35.0, // TODO: scale icons based on mediaquery height and width
            color: Colors.black,
            onPressed: () {
              print("More Pressed!");
            },
          ),
          Padding(
            padding: EdgeInsets.fromLTRB(
                MediaQuery.of(context).size.width * 0.034,
                MediaQuery.of(context).size.height * 0.02839,
                0.0,
                0.0),
            child: Material(
              color: Colors.transparent,
              elevation: 7.5,
              borderRadius: BorderRadius.circular(200.0),
              child: Container(
                height: MediaQuery.of(context).size.height * 0.009675,
                width: MediaQuery.of(context).size.width * 0.0559,
                color: Colors.transparent,
              ),
            ),
          ),
        ],
      )
    ];
  }