<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Flutter底部和頂部導航欄的實現,供大家參考,具體內容如下
帶文字圖示的底部導航欄(使用BottomNavigationBar和BottomNavigationBarItem)來實現效果 (可以實現圖片很文字,可以監聽點選改變圖片和文字的顏色)
/* * BottomNavigationBarItem的一些屬性 * const BottomNavigationBarItem({ * 圖示 @required this.icon, this.title,//標題 Widget activeIcon,//被選中時的Icon this.backgroundColor,//背景顏色 }) * */
實現核心程式碼:
bottomNavigationBar: BottomNavigationBar( /// items: List<BottomNavigationBarItem> : 表示需要顯示的底控制元件個數 items: [ BottomNavigationBarItem( /// 設定Icon: _selectedIndex 如果選中的是當前item icon和文字都需要還 icon: Image.asset(_selectedIndex == 0 ? image_pressed[0] : image_normal[0], ///設定圖片的寬度和高度 有些圖片很大,防止圖片過大 width: 32.0, height: 32.0, ), title: Text( titles[0], style: TextStyle( color: _selectedIndex == 0 ? Color(0xFF46c01b) : Color(0xff999999) ), ), ), BottomNavigationBarItem( icon: Image.asset(_selectedIndex == 1 ? image_pressed[1] : image_normal[1], width: 32.0, height: 32.0, ), title: Text( titles[1], style: TextStyle( color: _selectedIndex == 1 ? Color(0xFF46c01b) : Color(0xff999999) ), ), ), BottomNavigationBarItem( icon: Image.asset(_selectedIndex == 2 ? image_pressed[2] : image_normal[2], width: 32.0, height: 32.0, ), title: Text( titles[2], style: TextStyle( color: _selectedIndex == 2 ? Color(0xFF46c01b) : Color(0xff999999) ), ), ), BottomNavigationBarItem( icon: Image.asset(_selectedIndex == 3 ? image_pressed[3] : image_normal[3], width: 32.0, height: 32.0, ), title: Text( titles[3], style: TextStyle( color: _selectedIndex == 3 ? Color(0xFF46c01b) : Color(0xff999999) ), ), ), ], //代表BottomNavigationBar 中當前選中的是下表是_selectedIndex的BottomNavigationBarItem控制元件 currentIndex: _selectedIndex, /// 型別 充滿(填充方式) type: BottomNavigationBarType.fixed, /// 當你點選其中的BottomNavigationBarItem的時候,會呼叫這個方法 onTap: (index){ // print('你點選了哪個按鈕 $index'); //重新整理狀態 setState(() { /// 在點選方法中改變 選中下標 _selectedIndex = index; }); }, ),
Scaffold + Appbar + Tabbar + PageView 來組合實現效果 實現頂部 底部導航欄效果(目前不知道怎麼實現這個點選變換圖片和文字的顏色)
核心程式碼:
@override Widget build(BuildContext context) { // TODO: implement build ///頂部TABBar的模式 if (this._type == GYTabBarWidget.TOP_TAB) { return Scaffold( ///設定側邊滑出 drawer, 不需要的可以不設定 drawer: Scaffold存在的側滑屬性 drawer: _drawer, /// 設定懸浮按鈕,不需要的可以不設定 floatingActionButton: _floatingActionButton, /// 標題列 appBar: AppBar( title: _title, backgroundColor: _backgroundColor, /// 設定tabBar空件 bottom: TabBar( ///頂部模式下 tabBar可以滑動的模式 isScrollable: true, //這個屬性設定 頂部tabBar是否可以滑動 如果不可以 就全部不顯示在一個屏內,如果數量多可能看不見文字 ///設定Controller屬性 必須要有控制器 雨pageView的控制器同步 controller: _tabController,//該導航欄中的 tabBar 設定一個控制器 /// 每一個tab item 是一個List<Widget> tabs: _tabItems,//設定需要現實的 Items ///tab底部選中顏色 indicatorColor: _indicatorColor, ), ), //TabBarView 必須要配合TabController來使用 這個TabBar和PageView 組合來實現這個頂部導航欄的效果 //設定頁面主題 pageView 用於承載Tab對應的頁面 body: PageView( //pageView /// 必須要有控制器 與TabBar的控制器同步 controller: _pageController, ///每一個 tab 對應的頁面主體,是一個List<Widget> children: _tabViews, ///頁面觸控作用滑動回撥,用於同步tab選中狀態 onPageChanged: (index) { _tabController.animateTo(index); }, ), ); } ///底部TAbBar模式 return new Scaffold( ///設定側邊滑出 drawer,不需要可以不設定 drawer: _drawer, ///設定懸浮按鍵,不需要可以不設定 floatingActionButton: _floatingActionButton, ///標題列 appBar: new AppBar( backgroundColor: _backgroundColor, title: _title, ), ///頁面主體,PageView,用於承載Tab對應的頁面 body: new PageView( ///必須有的控制器,與tabBar的控制器同步 controller: _pageController, ///每一個 tab 對應的頁面主體,是一個List<Widget> children: _tabViews, onPageChanged: (index) { ///頁面觸控作用滑動回撥,用於同步tab選中狀態 _tabController.animateTo(index); }, ), ///底部導航欄,也就是tab欄 bottomNavigationBar: Scaffold控制元件中底部導航欄屬性 bottomNavigationBar: new Material( color: _backgroundColor, ///tabBar控制元件 child: new TabBar( ///必須有的控制器,與pageView的控制器同步 controller: _tabController, ///每一個tab item,是一個List<Widget> tabs: _tabItems, ///tab底部選中條顏色 indicatorColor: _indicatorColor, ), )); } }
上述程式碼注意:
1.要建立TabController 和PageController 來監聽 tabbar和PageView的一些滑動和同步操作
2.切換時需要動畫 必須要通過 with SingleTickerProviderStateMixin 實現動畫效果。
3.當你切換每個頁面的時候,發現每次都會重新呼叫initState()方法來初始化你的頁面,解決方法:
讓每個子頁面
class _TabBarPageFirstState extends State<TabBarPageFirst> with AutomaticKeepAliveClientMixin { //然後在其中實現這個方法 你就會發現你的子頁面不會每次切換時都會重新載入構建 @override bool get wantKeepAlive => true; }
Scaffold + Appbar + Tabbar + TabBarView 來實現頂部導航欄(目前還不知道點選怎麼變化圖片和文字顏色)
class GYTopTabBarController extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build /// 這裡需要使用DefaultTabController來包裹 ,如果沒有包裹則使用TabBarView /// 會報錯 return DefaultTabController( length: 8, child: Scaffold( appBar: AppBar( title: Text('DefaultTabBarController'), bottom: TabBar( isScrollable: true, tabs: <Widget>[ /// 這裡可以使用Tab控制元件 來時先圖示和文字的效果 /* Tab: const Tab({ Key key, this.text, this.icon, this.child, })*/ /// Tab(icon : , title: ), Text('111'), Text('222'), Text('333'), Text('444'), Text('555'), Text('666'), Text('777'), Text('888'), ], ), ), body: TabBarView( children: <Widget>[ TabBarPageFirst(), TabBarPageSecond(), TabBarPageThree(), TabBarPageFour(), TabBarPageFirst(), TabBarPageSecond(), TabBarPageThree(), TabBarPageFour(), ], ), ), ); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45