Постоянная нижняя панель навигации 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
);
},
);
}
}