如何解决如果我们在 GetX 上使用 bottomNavigationBar 如何使用内部导航
我正在尝试在小部件的 body
内进行导航,其中 bottomNavigationBar
保持在外部,这是我的代码:
class WrapperController extends GetxController {
int currentIndex = 0;
List<BottomNavigationElement> items = [];
Widget navigationTab({GlobalKey<NavigatorState> naviKey,Widget widget}) {
return Navigator(
key: naviKey,onGenerateRoute: (routeSettings) {
return GetPageRoute(page: () => widget);
},);
}
Widget bottomNavigationBar() {
return BottomNavigationBar(
selectedItemColor: Get.theme.accentColor,type: BottomNavigationBarType.fixed,currentIndex: currentIndex,backgroundColor: Get.theme.primaryColor,onTap: (int index) => _selectTab(index),items: items.map((e) => e.bottomBarItem).toList(),);
}
void _selectTab(int index) {
if (index == currentIndex) {
items[index]
.navigationKey
.currentState
.popUntil((route) => route.isFirst);
} else {
currentIndex = index;
}
update();
}
Future<bool> onWillPop() async {
final isFirstRouteInCurrentTab =
!await items[currentIndex].navigationKey.currentState.maybePop();
if (isFirstRouteInCurrentTab) {
if (currentIndex != 0) {
// _selectTab(1);
return false;
}
}
return isFirstRouteInCurrentTab;
}
@override
void onInit() {
super.onInit();
items = [
//Каталог
BottomNavigationElement(
bottomBarItem: BottomNavigationBarItem(
icon: Icon(Icons.search),label: "Home",),bottomBarView: HomePage(),navigationKey: Get.nestedKey('0'),//Любимое
BottomNavigationElement(
bottomBarItem: BottomNavigationBarItem(
icon: Icon(Icons.favorite_border),label: "Favorites",bottomBarView: FavoritesPage(),navigationKey: Get.nestedKey('1'),//Корзина
BottomNavigationElement(
bottomBarItem: BottomNavigationBarItem(
icon: Icon(Icons.shopping_cart_outlined),label: "Cart",bottomBarView: CartPage(),navigationKey: Get.nestedKey('2'),//Заказы
BottomNavigationElement(
bottomBarItem: BottomNavigationBarItem(
icon: Icon(Icons.history),label: "History",bottomBarView: HistoryPage(),navigationKey: Get.nestedKey('3'),//Меню
BottomNavigationElement(
bottomBarItem: BottomNavigationBarItem(
icon: Icon(Icons.menu),label: "Menu",bottomBarView: MenuPage(),navigationKey: Get.nestedKey('4'),];
}
}
class BottomNavigationElement {
Widget bottomBarView;
BottomNavigationBarItem bottomBarItem;
GlobalKey<NavigatorState> navigationKey;
BottomNavigationElement({
@required this.bottomBarView,@required this.bottomBarItem,@required GlobalKey<NavigatorState> navigationKey,});
}
这里是 Wrapper
小部件:
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetBuilder<WrapperController>(builder: (controller) {
return Scaffold(
body: IndexedStack(
index: controller.currentIndex,children: controller.items
.map((e) => controller.navigationTab(
naviKey: e.navigationKey,widget: e.bottomBarView,))
.toList(),bottomNavigationBar: controller.bottomNavigationBar(),);
});
}
}
这是带有导航按钮的 HomePage
("Search"):
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Home"),body: Center(
child: ElevatedButton(
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => Detail(),child: Text("Detail"),);
}
}
问题是,当我改用 Navigator.of (context)
Get.to ()
时,导航是完全完成的,而不是在主体内部完成。我需要使用 Get.to ()
进行内部导航,我该怎么做?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。