Проблема прокрутки индекса с PageView.Builder () - PullRequest
0 голосов
/ 04 апреля 2020

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

Widget build(BuildContext context) {
    final int initialPage = 1000;

    return Container(
      margin: const EdgeInsets.all(10.0),
      height: 400,
      child: PageView.builder(
        controller: PageController(
          keepPage: true,
          initialPage: initialPage,
        ),

        itemBuilder: (context, position) {

          print(position);

          return Container(child:Text(position),
          );
        },
        itemCount: null,
      ),
    );
  }

Затем я прокручиваю вправо 3 раза, и консоль показывает это:

I/flutter (12616): 1000
I/flutter (12616): 1001
I/flutter (12616): 1002
I/flutter (12616): 1003

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

I/flutter (12616): 1000
I/flutter (12616): 1001
I/flutter (12616): 1002
I/flutter (12616): 1003
I/flutter (12616): 999
I/flutter (12616): 1004
I/flutter (12616): 1005

Это было 3 раза вправо, 4 раза влево и 6 на снова Почему функция itemBuilder иногда не запускается?

1 Ответ

0 голосов
/ 05 апреля 2020

Ну, я думаю, что причина в том, что print() запускается, когда компоновщик PageView должен build новую страницу.

Когда вы go возвращаетесь (или вперед), * ​​1005 * и вы go переходите на страницу, которая уже была создана , сборщик больше не запускается. (Ничего не построить)

Страницы 1003 1002 1001 1000 уже были созданы при возврате.


Пожалуйста, прочитайте это из документации Конструктор PageView.builder

Создает прокручиваемый список, который обрабатывает страницу за страницей, используя виджеты, созданные по требованию .

Этот конструктор подходит для просмотра страниц с большими ( или бесконечное число детей, потому что строитель называется только для тех детей, которые действительно видны .

...