Flutter 如何在Flitter应用程序中的页面中从切换到切换底部导航栏页面

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( 主页:

我的应用程序从一个启动屏幕开始,然后转到主屏幕,在那里我将底部的导航条形码和5个选项放在一起,这5个选项的代码被分隔成单独的类。dart文件,这些选项在主屏幕上显示为列表。现在我想在第3页上有一个按钮,它将打开导航选项的第5页,然后在第5页上,它将在3个选项中进一步打开第2个选项卡选项。 在pub.dev提供程序包的帮助下,我已经能够使用第3页上的按钮打开第5页 我一直在使用3.0.0+1版本的provider包

提供者类

主屏幕.省道

@覆盖
小部件构建(构建上下文){
返回材料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
},