赞
踩
我们知道 Scaffold 实现了基本的 Material 布局。只要是在 Material 中定义了的单个界面显示的布局控件元素,都可以使用 Scaffold 来绘制。
如果我们想实现底部 Tab 页切换的效果,应该如何做呢?
Scaffold 的 bottomNavigationBar 属性是一个 BottomNavigationBar 类型的对象。BottomNavigationBar 是底部导航条,可以帮助我们实现底部 Tab 切换。
它通常和 BottomNavigationBarItem 配合使用
我们来看 BottomNavigationBar 的常见的属性:
属性 | 类型 | 说明 |
---|---|---|
items | List | 底部导航条按钮集合 |
iconSize | double | BottomNavigationBarItem icon的大小 |
currentIndex | int | 当前显示项的下标 |
onTap | ValueChanged < int > | 点击导航栏子项时的回调 |
fixedColor | Color | 底部导航栏 type 为 fixed 时导航栏的颜色,如果为空的话默认使用 ThemeData.primaryColor |
type | BottomNavigationBarType | 底部导航栏的类型,有 fixed 和s hifting 两种类型,显示效果不一样 |
我们再来看一下 BottomNavigationBarItem。
底部导航栏要显示的 Item,由图标和标题组成。
构造方法:
const BottomNavigationBarItem({
@required this.icon,
this.title,
Widget activeIcon,
this.backgroundColor,
}) : activeIcon = activeIcon ?? icon,
assert(icon != null);
属性 | 类型 | 说明 |
---|---|---|
icon | Widget | 要显示的图标控件,一般都是 Iocn |
title | Widget | 要显示的标题控件,一般都是 Text |
activeIcon | Widget | 选中时要显示的 icon,一般都是 Icon |
backgroundColor | Color | BottomNavigationBarType 为 shifting 时的背景颜色 |
示例:
List<Widget> _pageList = [
NowPage(),
PlansPage(),
IdeasPage(),
];
示例:
List<BottomNavigationBarItem> _barItem = [
BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('首页')),
BottomNavigationBarItem(icon: Icon(Icons.list), title: Text('任务')),
BottomNavigationBarItem(icon: Icon(Icons.access_time), title: Text('计划')),
];
示例:
int _currentIndex = 0;
示例:
class MainPage extends StatefulWidget{
MainPage({Key key, this.title}) : super(key: key);
final String title;
@override
_MainPage createState() => _MainPage();
}
class _MainPage extends State<MainPage> {
int _currentIndex = 0;
List<Widget> _pageList = [
NowPage(),
PlansPage(),
IdeasPage(),
];
List<BottomNavigationBarItem> _barItem = [
BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('首页')),
BottomNavigationBarItem(icon: Icon(Icons.list), title: Text('任务')),
BottomNavigationBarItem(icon: Icon(Icons.access_time), title: Text('计划')),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
actions: [
new IconButton(
icon: new Icon(Icons.add, color: Colors.white,),
onPressed: null,
)],
),
body: this._pageList[this._currentIndex],
bottomNavigationBar: BottomNavigationBar(
onTap: (int index) {
setState(() {
this._currentIndex = index;
});
},
currentIndex: this._currentIndex,
items: _barItem,
iconSize: 25,
fixedColor: Colors.green,
selectedFontSize: 16,
unselectedFontSize: 12,
type: BottomNavigationBarType.fixed,
),
);
}
}
注意,这里页面时需要变换的,所以首页要继承自 StatefulWidget 类。
**PS:更多精彩内容,请查看 --> 《Flutter 开发》
**PS:更多精彩内容,请查看 --> 《Flutter 开发》
**PS:更多精彩内容,请查看 --> 《Flutter 开发》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。