Постоянная нижняя панель навигации Flutter на всех страницах -> Маршрутизация страниц не работает

У меня проблема с нижней панелью навигации, которая отображается на всех страницах и маршрутизацией страниц в моем приложении Flutter. Я следовал руководству по созданию нижней панели навигации, которая отображается на всех моих экранах (https://www.youtube.com/watch?v=qj7jcuU2Z10), но теперь маршрутизация страниц больше не работает. Если я нажму кнопку для перехода на второй экран, он снова откроет домашнюю страницу.

Я хочу открыть второй экран на странице "Категории" с помощью onTap: (){Navigator.of(context).pushNamed("/second");},

В приложении вы можете найти мой код. Спасибо!

      class Homepage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => HomepageState();
}

class HomepageState extends State<Homepage> {
  String _currentPage = "Home";
  List<String> pageKeys = ["Home", "Search", "Profil"];
  Map<String, GlobalKey<NavigatorState>> _navigatorKeys = {
    "Home": GlobalKey<NavigatorState>(),
    "Search": GlobalKey<NavigatorState>(),
    "Profil": GlobalKey<NavigatorState>(),
  };
  int _selectedIndex = 0;

  void _selectTab(String tabItem, int index) {
    if (tabItem == _currentPage) {
      _navigatorKeys[tabItem].currentState.popUntil((route) => route.isFirst);
    } else {
      setState(() {
        _currentPage = pageKeys[index];
        _selectedIndex = index;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {
        final isFirstRouteInCurrentTab =
            !await _navigatorKeys[_currentPage].currentState.maybePop();
        if (isFirstRouteInCurrentTab) {
          if (_currentPage != "Home") {
            _selectTab("Home", 1);

            return false;
          }
        }
        return isFirstRouteInCurrentTab;
      },
      child: Scaffold(
        body: Stack(children: <Widget>[
          _buildOffstageNavigator("Home"),
          _buildOffstageNavigator("Search"),
          _buildOffstageNavigator("Profil"),
        ]),
        bottomNavigationBar: BottomNavigationBar(
          showSelectedLabels: false,
          showUnselectedLabels: false,
          backgroundColor: secondaryColor,
          selectedItemColor: primaryColor,
          unselectedItemColor: Colors.grey,
          onTap: (int index) {
            _selectTab(pageKeys[index], index);
          },
          currentIndex: _selectedIndex,
          items: [
            BottomNavigationBarItem(
                icon: Icon(Icons.home_filled), label: 'Home'),
            BottomNavigationBarItem(
              icon: Icon(Icons.search),
              label: 'Search',
            ),
            BottomNavigationBarItem(icon: Icon(Icons.face), label: 'Profil'),
          ],
          type: BottomNavigationBarType.fixed,
        ),
      ),
    );
  }

  Widget _buildOffstageNavigator(String tabItem) {
    return Offstage(
      offstage: _currentPage != tabItem,
      child: TabNavigator(
        navigatorKey: _navigatorKeys[tabItem],
        tabItem: tabItem,
      ),
    );
  }
}

import 'package:flutter/material.dart';
import 'package:persistent_bottom/screens/main_screens/categories.dart';
import 'package:persistent_bottom/screens/main_screens/profil.dart';
import 'package:persistent_bottom/screens/main_screens/search.dart';

class TabNavigator extends StatelessWidget {
  TabNavigator({this.navigatorKey, this.tabItem});
  final GlobalKey<NavigatorState> navigatorKey;
  final String tabItem;

  @override
  Widget build(BuildContext context) {

    Widget child ;
    if(tabItem == "Home")
      child = Categories();
    else if(tabItem == "Search")
      child = Search();
    else if(tabItem == "Profil")
      child = Profil();
    
    return Navigator(
      key: navigatorKey,
      onGenerateRoute: (routeSettings) {
        return MaterialPageRoute(
          builder: (context) => child
        );
      },
    );
  }
}

0 ответов

Другие вопросы по тегам