то, что я пробовал, ниже.
SizedBox(
width: MediaQuery.of(context).size.width * 0.88,
height: MediaQuery.of(context).size.height * 0.42,
child: ListView.builder(
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return _buildListItem();
}),
)
и виджет списка
Widget _buildListItem() {
return ConstrainedBox(
constraints: BoxConstraints(
minHeight: 20,
maxHeight: 120),
child:Container(child:Text("Looooongggg textttttttttt
the text size is alwayysss different "),
),}
Я хочу, чтобы размер элемента представления списка был динамическим, но также максимальная высота была зафиксирована на уровне 120. Другими словами, независимо от того, насколько длинный текст, контейнер также не должен увеличиваться до 120 или более.
Этот код всегда показывает мне только контейнеры максимальной высоты. Какими бы короткими ни были письма,
как я мог этого добиться?
Вы можете сделать это, установив физику прокрутки на NeverScrollablePhysics. Таким образом, представление списка займет достаточную высоту, чтобы в него могли поместиться все его дочерние элементы. Например:-
...
ListView.builder(
physics:NeverScrollableScrollPhysics(),//this line would the change
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return _buildListItem();
}),
),
...
ценить это. я обращусь к этому
Попробуйте виджет IntrinsicHeight
Widget _buildListItem() {
return ConstrainedBox(
constraints: BoxConstraints(
minHeight: 20,
maxHeight: 120),
child: IntrinsicHeight(child:Container(child:Text("Looooongggg textttttttttt
the text size is alwayysss different "),
)),}
Спасибо! это работает отлично. Мне просто интересно, вы знаете какой-нибудь другой метод, кроме этого? Я просто спрашиваю для моей учебной цели. Если вы не можете об этом подумать, вам не нужно отвечать.
IntrinsicHeight довольно дорог, проверьте документы. Вы можете избежать его использования.
Используйте Container
и назначьте min, max-height для BoxConstraints
Container(
child: ListView.builder(itemBuilder: (BuildContext context, index) {
return Container(
constraints: BoxConstraints(minHeight: 20, maxHeight: 40),
color: Colors.red,
child: Divider(),
);
}, itemCount: itemsList.length,),
),
Выход:
Это почти то же самое, что и код, который я уже поставил в вопросе. За исключением того, что контейнер и ограниченные свойства меняются местами.
Это сохранит минимальное и максимальное ограничение по высоте, это работает
Я просто сделал то, что вы предложили. и это не работает. он всегда показывает максимальную высоту
Это может быть потому, что ваш ребенок слишком большой, ему нужно максимум 40.
Оберните представление списка внутри одного дочернего виджета представления прокрутки и включите сжатие внутри представления списка. Это поможет вам.