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

Я новичок в 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'),
          )
        ],
      ),
Другие вопросы по тегам