PageView.builder, дающий горизонтальный видовой экран, получил ошибку неограниченной высоты - PullRequest
0 голосов
/ 13 марта 2019

Я очень новичок, чтобы трепетать, и я пытаюсь научиться создавать представления.Я попытался создать отдельный файл представления или виджета, если это так называется во флаттере, и просто вызвать его из main.dart.

У меня есть отдельный виджет, содержащий этот код

class PageEntryWidgetMain extends StatefulWidget {
  final PageViewEntryMain pageViewEntryMain;

  const PageEntryWidgetMain({Key key, this.pageViewEntryMain})
      : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return _PageEntryWidgetMainState();
  }
}

class _PageEntryWidgetMainState extends State<PageEntryWidgetMain> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Row(
        children: <Widget>[
          Text(widget.pageViewEntryMain.title)
        ],
      ),
    );
  }
}

и я пытаюсь показать это, используя пейджер вида со следующим кодом

return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            PageView.builder(
              itemBuilder: (context, position) {
                PageEntryWidgetMain(
                  pageViewEntryMain: pages[position],
                );
              },
              itemCount: pages.length,
              scrollDirection: Axis.horizontal,
            )
          ],
        ),
      ),
    );

, но он выдаёт мне следующие ошибки

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

Я немного смущен тем, на что он на самом деле жалуется.Я могу отобразить только одно представление, заменив PageView.builder этим кодом

PageEntryWidgetMain(pageViewEntryMain: pages[0])

Так что я считаю, что отдельный виджет сам по себе не имеет проблемы.Вероятно, речь идет о том, как я пытаюсь использовать ViewPager, который выдает мне ошибки.

Я искал реализации PageView, но я не видел ни одного, у которого на самом деле было бы отдельное представление для вызова только для отображения.Мне нужно изучить это таким образом, чтобы я мог разделять представления, а не просто записывать все в один файл.

1 Ответ

1 голос
/ 13 марта 2019

PageView не может быть прямым потомком Column. Измените свой столбец, добавив между ними Expanded, как показано ниже:

Column(
  children: <Widget>[
    Expanded(
      child: PageView.builder(),
    ),
  ]
)

Чтобы объяснить, что здесь происходит, Column имеет неограниченную горизонтальную ширину, то есть будет продолжать расширяться по горизонтали, занимая столько места, сколько нужно ребенку. PageView (и любой другой виджет с горизонтальной прокруткой) для работы логики прокрутки требуются горизонтальные ограничения.

Expanded ограничивает горизонтальный размер PageView, занимая как можно больше места, что должно решить проблему.

...