GridView, который автоматически устанавливает высоту строки для самого высокого элемента сетки - PullRequest
3 голосов
/ 27 мая 2020

Название - это упрощенная версия того, чего я пытаюсь достичь: GridView, который автоматически устанавливает высоту строки на основе элемента сетки прототипа, который я предоставляю. Элемент прототипа - это самый высокий из возможных элементов, например, если элементы сетки содержат текст, прототип будет содержать максимально длинный текст.

Возможный обходной путь - это ListView, в котором каждая строка заключена в виджет IntrinsicHeight. Но:

  • Высота строки не обязательно одинакова, как в GridView.
  • IntrinsicHeight неэффективен согласно документации. Не уверен, сколько, возможно, это незначительно для простых макетов. В идеале эта операция «вычислить внутреннюю c высоту» должна вызываться только для одной строки прототипа.

Ответы [ 2 ]

1 голос
/ 10 июня 2020

Для установки произвольной высоты строки в зависимости от элемента, который вводится в элемент сетки, вы можете рассмотреть возможность использования этого flutter_staggered_grid_view плагина.

Он предоставляет различные виджеты как для обычных сеток, так и для сеток с ленточкой, а также позаботится о случайном размере ввода. Таким образом, независимо от размера виджета, который вы загрузите в сетку, он будет иметь размер элемента

0 голосов
/ 05 июня 2020

Насколько я понимаю, вы хотите динамически устанавливать размер для элемента GridView. Есть два способа: вычислять вручную и устанавливать каждый раз в зависимости от вашего содержимого или использовать SliverGridDelegateWithMaxCrossAxisExtent . Таким образом, в вашем GridView.builder вы можете добавить следующий атрибут:

gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                        maxCrossAxisExtent:
                            200.0, // maximum size of item (on small screens 1 item per row, on bigger as many as can fit with 200.0 px width)
                        childAspectRatio: 5 / 6,
                        crossAxisSpacing: 20,
                        mainAxisSpacing: 20,
                      ),

Он дает вам доступ к дополнительным инструментам для управления элементами GridView с сохранением соотношения сторон, он также имеет максимальный размер, который не должен превышать

...