Как остановить перестроение просмотра страницы на слайде слева направо в flutter

#flutter #dart #flutter-layout

#трепетать #дротик #флаттер-макет #flutter #dart #flutter-layout

Вопрос:

я хочу остановить перестроение просмотра страницы на слайде слева направо. в принципе, у меня есть 1 просмотр страницы с горизонтальной осью, внутри этого просмотра страницы у меня есть еще один просмотр страницы с вертикальной осью.

внутри 1 просмотра страницы у меня есть только 2 дочерних элемента, но во втором просмотре страницы у меня есть дочерние элементы на основе http-запроса.

Проблема: когда пользователь прокручивает 1 просмотр страницы вправо, а затем влево, то 1 просмотр страницы перестраивает второй дочерний просмотр страницы и автоматически устанавливает индекс страницы в 0.

Ожидание: просто я хочу остановить перестроение 1 просмотра страницы, когда пользователь прокручивает слева направо, затем остановите 1 просмотр страницы в этой правильной позиции и игнорируйте, чтобы установить позицию 0.

Пример просмотра страницы

 return PageView(
  scrollDirection: Axis.horizontal,
  allowImplicitScrolling: false,
  controller: _main_pageController,
  children: [
    PageView(
      controller: _pageController,
      scrollDirection: Axis.vertical,
      children: [
          for(int index = 0; index < complexTutorial.data.length;index  )
          COntainer(color:Colors.yellow),
                ],),
          
          // below is second child of 1 PageView.

         Container(child:Text("USER SETTING")),
          ],);
  

пожалуйста, помогите решить эту проблему, я новичок в flutter, спасибо.

Ответ №1:

Поместите контейнер в StatefulWidget, затем используйте AutomaticKeepAliveClientMixin

и переопределите метод ‘wantKeepAlive’ в StatefulWidget

 class YourStateFulWidget extends StatefulWidget with AutomaticKeepAliveClientMixin{


  @override
  _YourStateFulWidgetState createState() => _YourStateFulWidgetState();
}

class _YourStateFulWidgetState extends State<YourStateFulWidget> {
  @override
  Widget build(BuildContext context) {
   
    return Container(
       child: Text("USER SETTING")
      
    );
  }

 @override
  bool get wantKeepAlive => keepAlive;
}
  

Комментарии:

1. во-первых, он не работает с этим классом => class YourStateFulWidget расширяет StatefulWidget с помощью automatickeepaliveclientmix В работе с этим классом class _YourStateFulWidgetState расширяет состояние<YourStateFulWidget> без каких-либо ошибок, но функциональность не работает с этим классом