我想要在屏幕上显示的小部件列表(比方说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列,无论每个列的文本长度如何,尤其是标题行和内容行之间)。
答案 0 :(得分:2)
我最终使用了ListView.builder只是因为我想确保每一行都有效。
通过将每个Row的小部件放在Expandeds中,并为每个Expanded赋予flex属性,我解决了每行的偶数单元格宽度布局。
答案 1 :(得分:0)
ListView支持延迟加载,这对于大量数据是必须的,因为只有屏幕上可见的数据加载了ListView.builder和基于索引的构造。
在你的第二个例子中,所有表格的行都会被构建,因此我会说第一个例子更有效率。这对于100件物品来说可能并不重要。
答案 2 :(得分:0)
我将此JSON包用于较长列表。外观好,反应灵敏。
在这里您可以获取此package
如果您不喜欢此软件包,则可以使用 listview 。这对于一长串数据很有用。如果您想要一个流畅的应用程序[不崩溃],则最好使用listview。