Страница начинается с begin при переходе между 2 экранами с помощью BottomTabNavigator

#flutter #flutter-dependencies #flutter-navigation #flutter-routes

#flutter #flutter-зависимости #flutter-навигация #flutter-маршруты

Вопрос:

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

Вот мой код для перехода с одной страницы на другую.

 class _DefaultLayoutWidgetState extends State<DefaultLayoutWidget> {
  final List<Map<String, dynamic>> _pages = [
    {'page': PostScreen(), 'title': 'SelfieCorner'},
    {'page': NotificationScreen(), 'title': 'Notifications'}
  ];

  int _curruntIndex = 0;

  void handleTapEvent(inx) {
    setState(() {
      _curruntIndex = inx;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PostAppBarWidget(),
      body: _pages[_curruntIndex]['page'],
      bottomNavigationBar: BottomNavigationBar(
        onTap: (index) => handleTapEvent(index),
        currentIndex: _curruntIndex,
        items: [
          BottomNavigationBarItem(
            icon: Icon(
              Icons.home,
            ),
            title: Text('Home'),
          ),
          BottomNavigationBarItem(
            icon: Icon(
              Icons.notifications,
            ),
            title: Text('Notifications'),
          ),
          BottomNavigationBarItem(
            icon: Icon(
              Icons.lock,
            ),
            title: Text('Profile'),
          )
        ],
      ),
    );
  }
}
  

Ответ №1:

Рассмотрите возможность использования IndexedStack подобным образом. Он сохранит state предыдущую widget при переходе к другой.

 body: IndexedStack(.....),
      bottomNavigationBar: BottomNavigationBar(
        onTap: (index) => handleTapEvent(index),
        currentIndex: _curruntIndex,
        items: [
          BottomNavigationBarItem(
            icon: Icon(
              Icons.home,
            ),
            title: Text('Home'),
          ),
          BottomNavigationBarItem(
            icon: Icon(
              Icons.notifications,
            ),
            title: Text('Notifications'),
          ),
          BottomNavigationBarItem(
            icon: Icon(
              Icons.lock,
            ),
            title: Text('Profile'),
          )
        ],
      ),