Проблема 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 флаттера, чтобы лучше понять это.