我应该使用 Table 还是 ListView 来处理 Flutter 中的大量对象?

Mar*_*ary 4 listview tableview flutter

我有一个要在屏幕上显示的小部件列表(比如 100 个);屏幕可以容纳大约 10 个项目。在绘画效率方面,我应该使用 ListView.builder 还是带有 SingleChildScrollView 的 Table?或者是其他东西?

ListView 看起来像这样(有点伪编码):

return new Column(
  children: <Widget>[
    new Container(
      height: 30.0,
      child: new Row(
        children: <Widget>[
          utils.createLabelText('Name'),
          utils.createLabelText('Owner'),
          utils.createLabelText('Last Modified'),
        ],
      ),
    ),
    new Expanded(
      child: new ListView.builder(
        itemBuilder: (BuildContext context, int index) {
          doc_fidl.Document doc = model.documents[index];
          return new ListItem(
            doc: doc,
          );
        },
      ),
    ),
  ],
);
Run Code Online (Sandbox Code Playgroud)

而表格看起来像这样:

List<TableRow> rows = <TableRow>[
  new TableRow(
    children: <Widget>[
      utils.createLabelText('Name'),
      utils.createLabelText('Owner'),
      utils.createLabelText('Last Modified'),
    ],
  ),
];
for (Document doc in documents) {
  rows.add(
    new TableRow(
        doc: doc.widgetList,
    ),
  );
}

return new SingleChildScrollView(child: new Table(children: rows));
Run Code Online (Sandbox Code Playgroud)

ListView.builder 似乎是最有效的,因为它按需构建子项。但是,表格似乎更适合此任务(因为它可以轻松地正确对齐 3 列,而不管每列的文本长度如何,尤其是在标题行和内容行之间)。

Mar*_*ary 5

我最终使用 ListView.builder 只是因为我想确保每一行都是有效的。

我通过将每行的小部件放在 Expanded 中并给每个 Expanded 一个 flex 属性来解决每行的偶数单元宽度布局。