Флаттер изменяет страницу просмотра страницы за пределами виджета

#flutter #dart #state #state-management #flutter-pageview

Вопрос:

В моем приложении у меня есть BottomBar приложение, которое обрабатывает мои Pages . Прямо сейчас я просто справляюсь с Callbacks этим вот так:

 return Scaffold(
            body: PageView(
                controller: tabController,
                children: <Widget>[
                  HomeScreen(),
                  MultiProvider(
                    providers: [
                      ChangeNotifierProvider(
                        create: (context) => ScannerModel(),
                      ),
                      ChangeNotifierProvider(
                        create: (context) => ArticleSearchModel(),
                      ),
                    ],
                    child: ScanPage(),
                  ),
                  SettingsScreen(
                    packageInfo: _packageInfo,
                  ),
                ],
                physics: NeverScrollableScrollPhysics(),
                onPageChanged: (index) => setPageColor(index, context),
              ),
            ),
            bottomNavigationBar: FABBottomAppBar(
              items: [
                FABBottomAppBarItem(
                    iconUrl: 'images/bottom_bar_icons/home.svg'),
                FABBottomAppBarItem(
                    iconUrl: 'images/bottom_bar_icons/search.svg'),
                FABBottomAppBarItem(
                    iconUrl: 'images/bottom_bar_icons/settings.svg'),
              ],
              onPageChanged: (index) {
                
                tabController.jumpToPage(index); // <- change page
              },
          );
        } 
 

Пока все идет хорошо, он работает совершенно нормально.

Проблема:

Пользователь также может перейти на другую страницу, нажав button кнопку, которая вложена довольно глубоко внутри widget-tree . Теперь я знаю, что мог бы использовать тонну обратных вызовов и передать информацию прямо наверх. Но для этого потребуется не менее 5 обратных вызовов, и это кажется довольно уродливым.

Итак: Как я могу изменить tabControllers страницу из любого места простым способом?

Дайте мне знать, если вам понадобится дополнительная информация!