我应该在Flutter中使用Table或ListView作为大型对象列表吗?

时间:2018-01-12 21:41:01

标签: listview flutter tableview

我想要在屏幕上显示的小部件列表(比方说100);屏幕可以容纳约10项。在绘画效率方面,我应该使用ListView.builder,还是使用SingleChildScrollView的表?或其他什么?

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

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,
          );
        },
      ),
    ),
  ],
);

虽然表格看起来像这样:

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));

似乎ListView.builder最有效率,因为它按需构建子节点。但是,表似乎更适合此任务(因为它可以很容易地正确对齐3列,无论每个列的文本长度如何,尤其是标题行和内容行之间)。

3 个答案:

答案 0 :(得分:2)

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

通过将每个Row的小部件放在Expandeds中,并为每个Expanded赋予flex属性,我解决了每行的偶数单元格宽度布局。

答案 1 :(得分:0)

ListView支持延迟加载,这对于大量数据是必须的,因为只有屏幕上可见的数据加载了ListView.builder和基于索引的构造。

在你的第二个例子中,所有表格的行都会被构建,因此我会说第一个例子更有效率。这对于100件物品来说可能并不重要。

答案 2 :(得分:0)

我将此JSON包用于较长列表。外观好,反应灵敏。

在这里您可以获取此package

如果您不喜欢此软件包,则可以使用 listview 。这对于一长串数据很有用。如果您想要一个流畅的应用程序[不崩溃],则最好使用listview。