Flutter 如何在Flitter应用程序中的页面中从切换到切换底部导航栏页面
我的应用程序从一个启动屏幕开始,然后转到主屏幕,在那里我将底部的导航条形码和5个选项放在一起,这5个选项的代码被分隔成单独的类。dart文件,这些选项在主屏幕上显示为列表。现在我想在第3页上有一个按钮,它将打开导航选项的第5页,然后在第5页上,它将在3个选项中进一步打开第2个选项卡选项。 在pub.dev提供程序包的帮助下,我已经能够使用第3页上的按钮打开第5页 我一直在使用3.0.0+1版本的provider包 提供者类 主屏幕.省道Flutter 如何在Flitter应用程序中的页面中从切换到切换底部导航栏页面,flutter,dart,flutter-dependencies,flutter-provider,flutter-bottomnavigation,Flutter,Dart,Flutter Dependencies,Flutter Provider,Flutter Bottomnavigation,我的应用程序从一个启动屏幕开始,然后转到主屏幕,在那里我将底部的导航条形码和5个选项放在一起,这5个选项的代码被分隔成单独的类。dart文件,这些选项在主屏幕上显示为列表。现在我想在第3页上有一个按钮,它将打开导航选项的第5页,然后在第5页上,它将在3个选项中进一步打开第2个选项卡选项。 在pub.dev提供程序包的帮助下,我已经能够使用第3页上的按钮打开第5页 我一直在使用3.0.0+1版本的provider包 提供者类 主屏幕.省道 @覆盖 小部件构建(构建上下文){ 返回材料PP( 主页:
@覆盖
小部件构建(构建上下文){
返回材料PP(
主页:ChangeNotifierProvider(
子项:MyBottomNavBar(),
生成器:(BuildContext上下文)=>BottomNavigationBarProvider(),
),
);
}
}
类MyBottomNavBar扩展StatefulWidget{
@凌驾
_MyBottomNavBarState createState()=>\u MyBottomNavBarState();
}
类MyBottomNavBarState扩展状态{
底部导航气压选择
最终列表\u widgetOptions=[
LFGPage(),
DiscoverPage(),
首页(),
MessagePage(),
ProfilePageScreen(),
];
使用提供程序生成
@覆盖
小部件构建(构建上下文){
var homeScreenProvider=Provider.of(上下文);
脚手架
脚手架(
正文:导航器(
onGenerateRoute:(设置)=>CupertinoPageRoute(
设置:设置,
生成器:(上下文)=>\u widgetOptions[homeScreenProvider.currentIndex]
),
),
底部导航栏:底部导航栏(
currentIndex:homeScreenProvider.currentIndex,
项目:[
...
]
onTap:(索引){
///此处使用的注释提供程序
homeScreenProvider.currentIndex=索引;
},
),
),
我正在调用此onTap函数,该函数从底部导航栏导航到第5页,但我想自动转到3个选项中的第2个选项卡选项,但这一次,不是默认值
onTap:(){
varhomeScreenProvider=Provider.of(上下文);
homeScreenProvider.currentIndex=4;
//TODO:添加代码以打开底部导航栏第5页的第2个选项卡
},
我的意思是学习在返回到BNB页面时保持状态,页面的水平和垂直堆叠也是如此。
提前感谢您可以使用TabBarView而不是Navigator。并且可以使用controller来处理您想要访问的任何页面。
class BottomNavigationBarProvider with ChangeNotifier {
int _currentIndex = 2;
get currentIndex => _currentIndex;
set currentIndex(int index) {
_currentIndex = index;
notifyListeners();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ChangeNotifierProvider<BottomNavigationBarProvider>(
child: MyBottomNavBar(),
builder:(BuildContext context) => BottomNavigationBarProvider(),
),
);
}
}
class MyBottomNavBar extends StatefulWidget {
@override
_MyBottomNavBarState createState() => _MyBottomNavBarState();
}
class _MyBottomNavBarState extends State<MyBottomNavBar> {
final List<Widget> _widgetOptions = [
LFGPage(),
DiscoverPage(),
HomePage(),
MessagePage(),
ProfilePageScreen(),
];
@override
Widget build(BuildContext context) {
var homeScreenProvider = Provider.of<BottomNavigationBarProvider>(context);
Scaffold(
body: Navigator(
onGenerateRoute: (settings) => CupertinoPageRoute(
settings: settings,
builder: (context) => _widgetOptions[homeScreenProvider.currentIndex]
),
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: homeScreenProvider.currentIndex,
items: <BottomNavigationBarItem>[
...
]
onTap: (index) {
///NOTE provider used here
homeScreenProvider.currentIndex = index;
},
),
),
onTap: (){
varhomeScreenProvider=Provider.of<BottomNavigationBarProvider>(context);
homeScreenProvider.currentIndex = 4;
//TODO: Add code to open 2nd tab on 5th bottom navigation Bar Page
},