Проблема CustomScrollView и PageView

У меня есть CustomScrollView, который у меня есть SliverFixedExtentList и SliverList внутри. Я поместил PageView внутри делегата SliverFixedExtentList. Дело в том, что после прокрутки вниз, открытия страницы с подробностями и возврата назад это дает мне исключение, которого я не совсем понимаю:

 ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (25339): The following assertion was thrown while finalizing the widget tree:
I/flutter (25339): 'package:flutter/src/widgets/scroll_position.dart': Failed assertion: line 661 pos 12: 'pixels !=
I/flutter (25339): null': is not true.

Ты хоть представляешь, что происходит? Вот суть для создания проблемы: https://gist.github.com/figengungor/e03704744d0ef786a15ecb783060f730 (

1 ответ

Это похоже на повторяющуюся ошибку при использовании вкладок виджетов. На github есть открытая проблема, которая, похоже, касается других близких к вам случаев.

В вашем случае это, кажется, происходит, когда ваш PageView виджет теряет фокусировку экрана. Хотя это не очень хорошее решение (но оно устраняет ошибку), оно должно помочь вам:

Объявить ScrollController:

class HomePageState extends State<HomePage> {
    ScrollController _scrollController = new ScrollController();
    ...

Назначьте это вашему CustomScrollView:

CustomScrollView(
    controller: _scrollController,
    ...

Прежде чем перейти на другую страницу, прокрутите список вверх, чтобы сделать виджет PageView видимым:

_openSecondPage(BuildContext context) {
     _scrollController.animateTo(0.0, duration: Duration(milliseconds: 1), curve: Curves.bounceInOut);
     Navigator.of(context).push(MaterialPageRoute(builder: (_) => SecondPage()));
    ...

Вы должны сохранить позицию прокрутки, чтобы прокрутить до позиции, когда элемент был нажат.

PS: откройте вопрос о github флаттера, чтобы лучше понять это.

Другие вопросы по тегам