Как расширить PageView в обе стороны с помощью компоновщика? - PullRequest
0 голосов
/ 14 мая 2018

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

Значение по умолчанию scrollDirection для PageView равно Axis.horizontal. Итак, я имею в виду, что в обычном случае я могу прокручивать только бесконечно вправо, но не влево.

illustration

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

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Я решил это довольно прямо. Честно говоря, я, должно быть, сошел с ума, когда писал вопрос и выдавал награду.

// number is irrelevant
final initialPage = (
    .161251195141521521142025 // :)
    * 1e6,).round();
final itemCount = getSomeItemCount();

PageView.builder(
  pageController: PageController(
    initialPage: initialPage,
  ),
  itemBuilder: (context, page) {
    final index = itemCount - (initialPage - page - 1) % itemCount - 1;
    return getPageContent(index);
  },
);

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

0 голосов
/ 20 мая 2018

Нет официального способа бесконечной прокрутки в обоих направлениях.

Но вместо этого вы можете использовать PageController initialPage свойство. Установив это до абсурдно большого значения. А затем используйте это значение в качестве «индекса 0».

class MyHomePage extends StatelessWidget {
  final PageController pageController = new PageController(initialPage: 4242);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(body: new PageView.builder(
      controller: pageController,
      itemBuilder: (context, _index) {
        final index =  _index - 4242;
        return new Container(
          margin: const EdgeInsets.all(9.0),
          color: Colors.red,
          child: new Center(
            child: new Text(index.toString()),
          ),
        );
      },
    ));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...