Flutter進(jìn)階質(zhì)感設(shè)計之標(biāo)簽欄
在質(zhì)感設(shè)計的控件中,有一個顯示水平的一行選項(xiàng)卡,通常作為AppBar控件的一部分創(chuàng)建,并與TabBarView控件結(jié)合使用。
import 'package:flutter/material.dart'; /* * 枚舉類,標(biāo)簽演示樣式 * 圖標(biāo)和文本 * 僅圖標(biāo) * 僅文本 */ enum TabsDemoStyle { iconsAndText, iconsOnly, textOnly } /* * 頁面類 * 圖標(biāo) * 文本 */ class _Page { _Page({ this.icon, this.text, }); final IconData icon; final String text; } // 存儲所有頁面的列表 final List<_Page> _allPages = <_Page>[ new _Page(icon: Icons.event, text: 'EVENT'), new _Page(icon: Icons.home, text: 'HOME'), new _Page(icon: Icons.android, text: 'ANDROID'), new _Page(icon: Icons.alarm, text: 'ALARM'), new _Page(icon: Icons.face, text: 'FACE'), new _Page(icon: Icons.language, text: 'LANGUAGE'), ]; class ScrollableTabsDemo extends StatefulWidget { @override _ScrollableTabsDemoState createState() => new _ScrollableTabsDemoState(); } // 繼承SingleTickerProviderStateMixin,提供單個Ticker(每個動畫幀調(diào)用它的回調(diào)一次) class _ScrollableTabsDemoState extends State<ScrollableTabsDemo> with SingleTickerProviderStateMixin { /* * 在TabBar和TabBarView之間的坐標(biāo)選項(xiàng)卡選擇 * TabBar:質(zhì)感設(shè)計控件,顯示水平的一行選項(xiàng)卡 * TabBarView:可分布列表,顯示與當(dāng)前所選標(biāo)簽對應(yīng)的控件 */ TabController _controller; TabsDemoStyle _demoStyle = TabsDemoStyle.iconsAndText; @override void initState() { super.initState(); /* * 創(chuàng)建一個對象,用于管理TabBar和TabBarView所需的狀態(tài) * length:選項(xiàng)卡的總數(shù),存儲所有頁面的列表中的元素個數(shù) */ _controller = new TabController(vsync: this, length: _allPages.length); } // 釋放對象使用的資源 @override void dispose() { super.dispose(); _controller.dispose(); } void changeDemoStyle(TabsDemoStyle style) { setState((){ _demoStyle = style; }); } @override Widget build(BuildContext context) { // 獲取當(dāng)前主題的控件前景色 final Color iconColor = Theme.of(context).accentColor; return new Scaffold( appBar: new AppBar( title: new Text('可滾動的標(biāo)簽頁'), actions: <Widget>[ new PopupMenuButton<TabsDemoStyle>( onSelected: changeDemoStyle, itemBuilder: (BuildContext context) => <PopupMenuItem<TabsDemoStyle>>[ new PopupMenuItem<TabsDemoStyle>( value: TabsDemoStyle.iconsAndText, child: new Text('圖標(biāo)和文本') ), new PopupMenuItem<TabsDemoStyle>( value: TabsDemoStyle.iconsOnly, child: new Text('僅圖標(biāo)') ), new PopupMenuItem<TabsDemoStyle>( value: TabsDemoStyle.textOnly, child: new Text('僅文本') ) ] ), ], bottom: new TabBar( // 控件的選擇和動畫狀態(tài) controller: _controller, // 標(biāo)簽欄是否可以水平滾動 isScrollable: true, // 標(biāo)簽控件的列表 tabs: _allPages.map((_Page page){ switch(_demoStyle) { case TabsDemoStyle.iconsAndText: return new Tab(text: page.text, icon: new Icon(page.icon)); case TabsDemoStyle.iconsOnly: return new Tab(icon: new Icon(page.icon)); case TabsDemoStyle.textOnly: return new Tab(text: page.text); } }).toList(), ), ), body: new TabBarView( // 控件的選擇和動畫狀態(tài) controller: _controller, // 每個標(biāo)簽一個控件 children: _allPages.map((_Page page) { return new Container( key: new ObjectKey(page.icon), padding: const EdgeInsets.all(12.0), // 質(zhì)感設(shè)計卡片 child:new Card( child: new Center( child: new Icon( page.icon, color: iconColor, size: 128.0, ) ) ) ); }).toList(), ) ); } } void main() { runApp(new MaterialApp( title: 'Flutter教程', home: new ScrollableTabsDemo(), )); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中如何取消listview的點(diǎn)擊效果
這篇文章主要介紹了 Android中取消listview的點(diǎn)擊效果的實(shí)現(xiàn)方法,通過引用transparent之后會讓點(diǎn)擊效果透明化,一起通過本文學(xué)習(xí)吧2017-01-01Android編程之基于Log演示一個activity生命周期實(shí)例詳解
這篇文章主要介紹了Android編程之基于Log演示一個activity生命周期,結(jié)合完整實(shí)例形式較為詳細(xì)的分析總結(jié)了Log演示activity生命周期的具體用法及Log的具體使用方法,需要的朋友可以參考下2015-12-12Android帶進(jìn)度條的下載圖片示例(AsyncTask異步任務(wù))
本文主要介紹Android帶進(jìn)度條的下載圖片示例(AsyncTask異步任務(wù))的方法解析。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04Android中Notification用法實(shí)例總結(jié)
這篇文章主要介紹了Android中Notification用法,以實(shí)例形式較為詳細(xì)的分析并總結(jié)了Notification的功能與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10Flutter 側(cè)滑欄及城市選擇UI的實(shí)現(xiàn)方法
這篇文章主要介紹了Flutter 側(cè)滑欄及城市選擇UI的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07android studio 使用Mocklocation虛擬定位
這篇文章主要介紹了android studio 使用Mocklocation虛擬定位總結(jié),本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12Kotlin開發(fā)實(shí)戰(zhàn)之hello world
這篇文章主要為大家詳細(xì)介紹了Kotlin開發(fā)實(shí)戰(zhàn)之hello world的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Android實(shí)現(xiàn)淘寶客戶端倒計時界面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)淘寶客戶端倒計時界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04