Flutter進(jìn)階質(zhì)感設(shè)計(jì)之標(biāo)簽欄
在質(zhì)感設(shè)計(jì)的控件中,有一個(gè)顯示水平的一行選項(xiàng)卡,通常作為AppBar控件的一部分創(chuàng)建,并與TabBarView控件結(jié)合使用。
import 'package:flutter/material.dart';
/*
* 枚舉類,標(biāo)簽演示樣式
* 圖標(biāo)和文本
* 僅圖標(biāo)
* 僅文本
*/
enum TabsDemoStyle {
iconsAndText,
iconsOnly,
textOnly
}
/*
* 頁(yè)面類
* 圖標(biāo)
* 文本
*/
class _Page {
_Page({
this.icon,
this.text,
});
final IconData icon;
final String text;
}
// 存儲(chǔ)所有頁(yè)面的列表
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,提供單個(gè)Ticker(每個(gè)動(dòng)畫幀調(diào)用它的回調(diào)一次)
class _ScrollableTabsDemoState extends State<ScrollableTabsDemo> with SingleTickerProviderStateMixin {
/*
* 在TabBar和TabBarView之間的坐標(biāo)選項(xiàng)卡選擇
* TabBar:質(zhì)感設(shè)計(jì)控件,顯示水平的一行選項(xiàng)卡
* TabBarView:可分布列表,顯示與當(dāng)前所選標(biāo)簽對(duì)應(yīng)的控件
*/
TabController _controller;
TabsDemoStyle _demoStyle = TabsDemoStyle.iconsAndText;
@override
void initState() {
super.initState();
/*
* 創(chuàng)建一個(gè)對(duì)象,用于管理TabBar和TabBarView所需的狀態(tài)
* length:選項(xiàng)卡的總數(shù),存儲(chǔ)所有頁(yè)面的列表中的元素個(gè)數(shù)
*/
_controller = new TabController(vsync: this, length: _allPages.length);
}
// 釋放對(duì)象使用的資源
@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('可滾動(dòng)的標(biāo)簽頁(yè)'),
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(
// 控件的選擇和動(dòng)畫狀態(tài)
controller: _controller,
// 標(biāo)簽欄是否可以水平滾動(dòng)
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(
// 控件的選擇和動(dòng)畫狀態(tài)
controller: _controller,
// 每個(gè)標(biāo)簽一個(gè)控件
children: _allPages.map((_Page page) {
return new Container(
key: new ObjectKey(page.icon),
padding: const EdgeInsets.all(12.0),
// 質(zhì)感設(shè)計(jì)卡片
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(),
));
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中如何取消listview的點(diǎn)擊效果
這篇文章主要介紹了 Android中取消listview的點(diǎn)擊效果的實(shí)現(xiàn)方法,通過引用transparent之后會(huì)讓點(diǎn)擊效果透明化,一起通過本文學(xué)習(xí)吧2017-01-01
Android編程之基于Log演示一個(gè)activity生命周期實(shí)例詳解
這篇文章主要介紹了Android編程之基于Log演示一個(gè)activity生命周期,結(jié)合完整實(shí)例形式較為詳細(xì)的分析總結(jié)了Log演示activity生命周期的具體用法及Log的具體使用方法,需要的朋友可以參考下2015-12-12
Android帶進(jìn)度條的下載圖片示例(AsyncTask異步任務(wù))
本文主要介紹Android帶進(jìn)度條的下載圖片示例(AsyncTask異步任務(wù))的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04
Android OkHttp的簡(jiǎn)單使用和封裝詳解
這篇文章主要介紹了Android OkHttp的簡(jiǎn)單使用和封裝詳解的相關(guān)資料,Android OKHttp的簡(jiǎn)單get、post的使用,再到它的封裝,需要的朋友可以參考下2016-12-12
Android中Notification用法實(shí)例總結(jié)
這篇文章主要介紹了Android中Notification用法,以實(shí)例形式較為詳細(xì)的分析并總結(jié)了Notification的功能與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Flutter 側(cè)滑欄及城市選擇UI的實(shí)現(xiàn)方法
這篇文章主要介紹了Flutter 側(cè)滑欄及城市選擇UI的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
android studio 使用Mocklocation虛擬定位
這篇文章主要介紹了android studio 使用Mocklocation虛擬定位總結(jié),本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
Kotlin開發(fā)實(shí)戰(zhàn)之hello world
這篇文章主要為大家詳細(xì)介紹了Kotlin開發(fā)實(shí)戰(zhàn)之hello world的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Android實(shí)現(xiàn)淘寶客戶端倒計(jì)時(shí)界面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)淘寶客戶端倒計(jì)時(shí)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04

