Flutter的Listview没有像Wrap这样的自动换行功能?

时间:2019-12-25 11:25:11

标签: flutter flutter-listview flutter-gridview

我想显示可变大小的小部件的列表。

Flutter的包装非常适合我的布局需求。

final List<dynamic> someItems; 

return SingleChildScrollView(
  child: Wrap(
    children: someItems.map((item) => _createTile(context, item)).toList(),
  ),
  scrollDirection: Axis.vertical,
);

enter image description here

但是一个致命的问题,Wrap不能懒惰地创建小部件。例如,如果上图显示的Tile小部件少于100个,但是数据列表的数量更多,则Wrap甚至创建不可见的小部件。

// The result of taking a log once for each item when configuring Wrap with a list of 1000 data.
I/flutter ( 4437): create Widget 0
I/flutter ( 4437): create Widget 1
I/flutter ( 4437): create Widget 2
I/flutter ( 4437): create Widget 3
I/flutter ( 4437): create Widget 4
I/flutter ( 4437): create Widget 5
I/flutter ( 4437): create Widget 6
I/flutter ( 4437): create Widget 7
I/flutter ( 4437): create Widget 8
...
I/flutter ( 4437): create Widget 999

ListView和GridView懒惰地创建窗口小部件,但是(至少就我目前所知)它们不能随意布置诸如Wrap之类的窗口小部件。

有没有一种方法可以实现我想要的布局?

1 个答案:

答案 0 :(得分:1)

尝试一下:

Wrap(
  children: someItems.map((item) => _createTile(context, item)).toList().cast<Widget>(),
)