Невозможно установить динамическую c высоту для столбца, включающего ListView.builder () flutter - PullRequest
0 голосов
/ 05 августа 2020

У меня есть следующий код, в котором я пытаюсь создать столбец внутри, который представляет собой контейнер, содержащий заголовок, и другой контейнер, содержащий список элементов, который можно прокручивать по горизонтали. Но я получаю следующую ошибку времени выполнения: «Во время выполнения PerformResize () было выдано следующее утверждение: горизонтальному окну просмотра была присвоена неограниченная высота.

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

Widget horizontalSlider(MediaQueryData mediaQuery){
  final List<String> entries = <String>['A', 'B', 'C','D','E'];
  return Container(
    padding: EdgeInsets.all(0),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
            padding: EdgeInsets.only(left:16),
            child: Text("Home",style: TextStyle(fontSize: 36, fontWeight: FontWeight.bold),)
        ),
        Container(
          child: ListView.builder(
          padding: EdgeInsets.all(8),
          itemCount: entries.length,
          itemBuilder: (BuildContext context, int index){
            return Column(
              children: <Widget>[
                Container(
                  height: mediaQuery.size.height/3,
                  margin: EdgeInsets.all(8),
                  decoration: BoxDecoration(
                    image: DecorationImage(
                      image: AssetImage('assets/images/$index.jpg'),
                      fit: BoxFit.cover,
                    ),
                    borderRadius: BorderRadius.circular(18),
                    boxShadow: [BoxShadow(
                      color: Colors.grey.withOpacity(0.5),
                      spreadRadius: 4,
                      blurRadius: 4,
                    ),],
                  ),
                  width: mediaQuery.size.width/1.5,
                ),
                Text("Item ${entries[index]}",style: TextStyle(fontSize: 18),),
              ],
            );
          },
          scrollDirection: Axis.horizontal,
      ),
        )],
    ),
  );
}

Я ожидаю от этого заголовка (т.е. первого контейнера внутри первый столбец), изображение высотой, равное одной трети высоты экрана, и текстовый виджет в конце. Но почему я получаю ошибку, которую не понимаю.

1 Ответ

0 голосов
/ 05 августа 2020

Наконец-то я нашел ответ из этой ветки https://github.com/flutter/flutter/issues/18341. Мне нужно заменить второй Container на Expanded, и он работает хорошо. Обновленный код

Widget horizontalSlider(MediaQueryData mediaQuery){
  final List<String> entries = <String>['A', 'B', 'C','D','E'];
  return Container(
    padding: EdgeInsets.all(0),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
            padding: EdgeInsets.only(left:16),
            child: Text("Home",style: TextStyle(fontSize: 36, fontWeight: FontWeight.bold),)
        ),
        Expanded(
          child: ListView.builder(
          padding: EdgeInsets.all(8),
          itemCount: entries.length,
          itemBuilder: (BuildContext context, int index){
            return Column(
              children: <Widget>[
                Container(
                  height: mediaQuery.size.height/3.5,
                  margin: EdgeInsets.all(8),
                  decoration: BoxDecoration(
                    image: DecorationImage(
                      image: AssetImage('assets/images/$index.jpg'),
                      fit: BoxFit.cover,
                    ),
                    borderRadius: BorderRadius.circular(18),
                    boxShadow: [BoxShadow(
                      color: Colors.grey.withOpacity(0.5),
                      spreadRadius: 4,
                      blurRadius: 4,
                    ),],
                  ),
                  width: mediaQuery.size.width/1.5,
                ),
                Text("Item ${entries[index]}",style: TextStyle(fontSize: 18),),
              ],
            );
          },
          scrollDirection: Axis.horizontal,
      ),
        )],
    ),
  );
}
...