一尘不染

如何在Flutter中返回小部件列表的一部分

flutter

我有一个包含多个部分的页面,每个部分都包含一个标题和文本列表。我希望整个系列作为一个系列统一滚动,并且想知道如何最好地打破这种逻辑。想象一下以下小部件树:

ListView(
  children: <Widget>[
    Text('Section 1 Header'),
    Text('Section 1 List Item 1'),
    Text('Section 1 List Item 2'),
    Text('Section 2 Header'),
    ...
  ]
)

就可以轻松构建的辅助函数而言,类似以下内容将是不错的选择:

ListView(
  children: <Widget>[
    Text('Section 1 Header'),
    _buildSection1ListItems(),
    Text('Section 2 Header'),
  ]
)

_buildSection1ListItems()如下所示:

List<Widget> _buildSection1ListItems() {
  return [
    Text('Section 1 List Item 1'),
    Text('Section 1 List Item 2'),
  ];
}

而且不像下面这样:

Widget _buildSection1ListItems() {
  return Expanded(
    child: Column(
      children: <Widget>[
        Text('Section 1 List Item 1'),
        Text('Section 1 List Item 2'),
      ]
    )
  );
}

到目前为止,我只发现了明显的第二种解决方案,但它引入了许多琐碎的小部件,这些小部件完全受业务逻辑重构的影响,而不是显示内容的实际的理想小部件树。

在Flutter中有这样做的模式吗?


阅读 277

收藏
2020-08-13

共1个答案

一尘不染

从Dart 2.2.2或更高版本开始,您可以使用传播运算符:

ListView(
  children: <Widget>[
    Text('Section 1 Header'),
    ..._buildSection1ListItems(),
    Text('Section 2 Header'),
  ]
)
2020-08-13