我正在使用一个用于在flutter中持久化导航条的包。包中。它试图使用getx来隐藏它。就像当我导航到仪表板时,我调用getx函数将导航设置为true,当我到达登录屏幕时,我将其设置为false。但这并没有奏效。我看到很多人都面临这个问题,但没有一个人给出正确的解决方案。
这是我的代码。
主页屏幕
import 'package:flutter/cupertino.dart';
import 'package:newmart/Order/order.dart';
import 'package:newmart/Screens/dashboard.dart';
import 'package:newmart/Recharge/recharge.dart';
import 'package:newmart/Company/support.dart';
import 'package:flutter/material.dart';
import 'package:newmart/mpin/set_mpin.dart';
import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:get/get.dart';
import 'package:newmart/getxcontrollers/navController.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key, required this.mobileNumber});
final String mobileNumber;
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
// String mb = "";
// late PersistentTabController _controller;
final NavigationBarController _navigationBarController =
Get.put(NavigationBarController());
List<PersistentBottomNavBarItem> _navBarsItems() {
return [
PersistentBottomNavBarItem(
icon: const Icon(CupertinoIcons.home),
title: ("Home"),
activeColorPrimary: CupertinoColors.activeGreen,
inactiveColorPrimary: CupertinoColors.systemGrey,
),
...rest
];
}
final controler = PersistentTabController();
List<Widget> _buildScreens() {
return [
const Dashboard(),
const Order(),
const SetMpin(),
const Recharge(),
const Support(),
];
}
@override
Widget build(BuildContext context) {
return PersistentTabView(
context,
screens: _buildScreens(),
hideNavigationBar: _navigationBarController.showNavigationBar.value,
controller: controler,
items: _navBarsItems(),
decoration: NavBarDecoration(borderRadius: BorderRadius.circular(1)),
navBarStyle: NavBarStyle.style1,
);
}
}
controoller
import 'package:get/get.dart';
class NavigationBarController extends GetxController {
var showNavigationBar = true.obs;
void toggleNavigationBar(bool value) {
showNavigationBar.value = value;
}
}
登录页面
final NavigationBarController _navigationBarController =
Get.put(NavigationBarController());
@override
void initState() {
super.initState();
_getCurrentPosition();
_navigationBarController.showNavigationBar.value = false;
setState(() {});
}
rest code...//
如何解决这个问题?
我认为您只使用NavigationBarController
来隐藏/显示底部导航栏。使用您的代码底部栏不会出现在主屏幕上。通过评论hideNavigationBar: _navigationBarController.showNavigationBar.value,
,它正在工作。
重定向到登录界面时可以使用withNavBar: false
。这对我很有用。
PersistentNavBarNavigator.pushNewScreen(
context,
screen: LoginScreen(),
withNavBar: false, // OPTIONAL VALUE. True by default.
pageTransitionAnimation: PageTransitionAnimation.cupertino,
);