Флаттер - Нижняя навигация - Как сделать перестроение страницы? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть приложение с тремя страницами, по которым пользователи могут перемещаться, используя нижнюю панель навигации. Тем не менее, я хочу, чтобы одна из трех страниц перестраивалась по мере того, как пользователи возвращались к ней (таким образом: удаляли текущее состояние и заново отображали его с нуля).

Мой код для навигации выглядит следующим образом.

Опции трех страниц:

static List<Widget> _widgetOptions = <Widget>[
    PostFeed(),
    Profile(),
    HabitList(),
  ];

Переключение между вариантами страницы (позже в нижней навигации):

 void _onItemTapped(int index) {
    setState(() {
      _selectedIndex = index;
    });
  }

В эшафот:

body: _widgetOptions.elementAt(_selectedIndex),
bottomNavigationBar: BottomNavigationBar(
  items: [
  BottomNavigationBarItem(
    icon: Icon(Icons.home),
  ),
  BottomNavigationBarItem(
    icon: Icon(Icons.person),
  ),
  BottomNavigationBarItem(
    icon: Icon(Icons.list),
  ),
],
currentIndex: _selectedIndex,
  onTap: _onItemTapped,
),

Использование этого код, состояние всех страниц остается неизменным c, когда я переключаюсь между ними. Я хотел бы загружать только один (PostFeed) теперь динамически, когда пользователь нажимает указанную c нижнюю навигационную иконку.

Кто-нибудь сейчас, как это сделать?

Большое спасибо заранее !

1 Ответ

0 голосов
/ 06 апреля 2020

Надеюсь, я понимаю ваш вопрос. У меня есть следующая Реализация в моем собственном приложении, и это перестраивает страницы в функции _showPage (int index), где разные страницы называются (QuestionPage, OwnQuestionPage и ProfilPage).

    class OpinionPage extends StatefulWidget {
  @override
  _OpinionPageState createState() => _OpinionPageState();
}

class _OpinionPageState extends State<OpinionPage> {
  int currentPageNumber;
  final List<Widget> pages = [
    QuestionPage(),
    OwnQuestionPage(),
    ProfilPage(),
  ];
  Widget currentPage = QuestionPage();
  final PageStorageBucket bucket = PageStorageBucket();

  @override
  void initState() {
    currentPageNumber = 0;
    SystemSettings.allowOnlyPortraitOrientation();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageStorage(bucket: bucket, child: currentPage),
      bottomNavigationBar: BottomNavigationBar(
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.question_answer, color: currentPageNumber == 0 ? primaryBlue : Colors.grey),
            title: Text(
              'Fragen',
              style: TextStyle(color: currentPageNumber == 0 ? primaryBlue : Colors.grey),
            ),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.add_circle, color: currentPageNumber == 1 ? primaryBlue : Colors.grey),
            title: Text(
              'Meine Fragen',
              style: TextStyle(color: currentPageNumber == 1 ? primaryBlue : Colors.grey),
            ),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.person, color: currentPageNumber == 2 ? primaryBlue : Colors.grey),
            title: Text(
              'Profil',
              style: TextStyle(color: currentPageNumber == 2 ? primaryBlue : Colors.grey),
            ),
          ),
        ],
        onTap: (int index) => _showPage(index),
      ),
    );
  }

  void _showPage(int index) {
    setState(() {
      switch (index) {
        case 0:
          currentPage = QuestionPage();
          currentPageNumber = 0;
          break;
        case 1:
          currentPage = OwnQuestionPage();
          currentPageNumber = 1;
          break;
        case 2:
          currentPage = ProfilPage();
          currentPageNumber = 2;
          break;
      }
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...