В Listview Flutter нет переноса слов, такого как Wrap?

Я хочу отобразить список виджетов с переменными размерами.

Flutter's Wrap отлично подходит для моих нужд макета.

final List<dynamic> someItems; 

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

Но фатальная проблема: Wrap не может лениво создавать виджеты. Например, если на изображении выше отображается менее 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 ответ

Попробуй это:

Wrap(
  children: someItems.map((item) => _createTile(context, item)).toList().cast<Widget>(),
)
Другие вопросы по тегам