Android 底部导航条未在颤振中改变屏幕

Android 底部导航条未在颤振中改变屏幕,android,flutter,dart,flutter-layout,hybrid-mobile-app,Android,Flutter,Dart,Flutter Layout,Hybrid Mobile App,我对flatter和Dart非常陌生,但对本机android开发(Java)非常在行,我正在尝试构建一个底部导航栏,在三个有状态的小部件之间切换。我成功地实现了底部导航栏的设计,但无法对其执行操作。我看了官方文件和youtube视频: (15分钟) 文件结构: main - screens - home - (other screens' folders) - first.dart 第一个。省道 class First extends StatefulWidg

我对flatter和Dart非常陌生,但对本机android开发(Java)非常在行,我正在尝试构建一个底部导航栏,在三个有状态的小部件之间切换。我成功地实现了底部导航栏的设计,但无法对其执行操作。我看了官方文件和youtube视频:

  • (15分钟)
文件结构:

main
  - screens
    - home
    - (other screens' folders)
    - first.dart
第一个。省道

class First extends StatefulWidget {
  @override
  _FirstState createState() => _FirstState();
}

class _FirstState extends State<First> {
  int _currentIndex = 0;
  List<Widget> listItems = [
    Home(),
    Dashboard(),
    Therapy(),
    Profile()
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      bottomNavigationBar: BottomNavigationBar(
        backgroundColor: Color(0xFF856C8B),
        selectedItemColor: Color(0xFFFFFFFF),
        unselectedItemColor: Color(0xFFF0F0F0),
        type: BottomNavigationBarType.fixed,
        currentIndex: 0,
        onTap: onTabTapped,
        items: [
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12),
                child: Icon(Icons.home, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12, right: 36),
                child: Icon(Icons.dashboard, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12, left: 36),
                child: Icon(Icons.star, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12),
                child: Icon(Icons.person, size: 24,),
              ),
              title: Text("")
          )
        ],
      ),
      // code to change screens
      body: listItems.elementAt(_currentIndex)
    );
  }

  void onTabTapped(int index) {
    setState(() {
      _currentIndex = index;
    });
  }
}
类首先扩展StatefulWidget{
@凌驾
_FirstState createState();
}
类_FirstState扩展了状态{
int _currentIndex=0;
列表项=[
Home(),
仪表板(),
治疗(),
简介()
];
@凌驾
小部件构建(构建上下文){
返回脚手架(
底部导航栏:底部导航栏(
背景颜色:颜色(0xFF856C8B),
选择EditemColor:Color(0xFFFFFFFF),
unselectedItemColor:颜色(0xFFF0),
类型:BottomNavigationBarType.fixed,
当前索引:0,
onTap:onTabTapped,
项目:[
底部导航气压计(
图标:填充(
填充:仅限边缘设置(顶部:12),
子项:图标(Icons.home,大小:24,),
),
标题:文本(“”)
),
底部导航气压计(
图标:填充(
填充:仅限边缘设置(顶部:12,右侧:36),
子项:图标(Icons.dashboard,大小:24,),
),
标题:文本(“”)
),
底部导航气压计(
图标:填充(
填充:仅限边缘设置(顶部:12,左侧:36),
子项:图标(Icons.star,大小:24,),
),
标题:文本(“”)
),
底部导航气压计(
图标:填充(
填充:仅限边缘设置(顶部:12),
子:图标(Icons.person,大小:24,),
),
标题:文本(“”)
)
],
),
//更改屏幕的代码
正文:listItems.elementAt(_currentIndex)
);
}
void onTabTapped(整数索引){
设置状态(){
_currentIndex=索引;
});
}
}
我不知道我的代码有什么问题,所以请帮助初学者


谢谢大家!

问题是:您没有将
底部导航栏中的
currentIndex
字段设置为
\u currentIndex
。您将其设置为
0

解决方案:将
底部导航栏中的
currentIndex
字段设置为
\u currentIndex

像这样

currentIndex: _currentIndex
完整构建方法代码:

Widget build(BuildContext context) {
    return Scaffold(
      bottomNavigationBar: BottomNavigationBar(
        backgroundColor: Color(0xFF856C8B),
        selectedItemColor: Color(0xFFFFFFFF),
        unselectedItemColor: Color(0xFFF0F0F0),
        type: BottomNavigationBarType.fixed,
        currentIndex: _currentIndex ///HERE,
        onTap: onTabTapped,
        items: [
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12),
                child: Icon(Icons.home, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12, right: 36),
                child: Icon(Icons.dashboard, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12, left: 36),
                child: Icon(Icons.star, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12),
                child: Icon(Icons.person, size: 24,),
              ),
              title: Text("")
          )
        ],
      ),
      // code to change screens
      body: listItems.elementAt(_currentIndex)
    );
  }

问题是:您没有将
底部导航栏中的
currentIndex
字段设置为
\u currentIndex
。您将其设置为
0

解决方案:将
底部导航栏中的
currentIndex
字段设置为
\u currentIndex

像这样

currentIndex: _currentIndex
完整构建方法代码:

Widget build(BuildContext context) {
    return Scaffold(
      bottomNavigationBar: BottomNavigationBar(
        backgroundColor: Color(0xFF856C8B),
        selectedItemColor: Color(0xFFFFFFFF),
        unselectedItemColor: Color(0xFFF0F0F0),
        type: BottomNavigationBarType.fixed,
        currentIndex: _currentIndex ///HERE,
        onTap: onTabTapped,
        items: [
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12),
                child: Icon(Icons.home, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12, right: 36),
                child: Icon(Icons.dashboard, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12, left: 36),
                child: Icon(Icons.star, size: 24,),
              ),
              title: Text("")
          ),
          BottomNavigationBarItem(
              icon: Padding(
                padding: EdgeInsets.only(top: 12),
                child: Icon(Icons.person, size: 24,),
              ),
              title: Text("")
          )
        ],
      ),
      // code to change screens
      body: listItems.elementAt(_currentIndex)
    );
  }