Android 底部导航条未在颤振中改变屏幕
我对flatter和Dart非常陌生,但对本机android开发(Java)非常在行,我正在尝试构建一个底部导航栏,在三个有状态的小部件之间切换。我成功地实现了底部导航栏的设计,但无法对其执行操作。我看了官方文件和youtube视频: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
- (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)
);
}