中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Flutter怎么實現一個標簽欄

發布時間:2021-06-09 17:23:20 來源:億速云 閱讀:371 作者:Leah 欄目:移動開發

使用Flutter怎么實現一個標簽欄?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

在質感設計的控件中,有一個顯示水平的一行選項卡,通常作為AppBar控件的一部分創建,并與TabBarView控件結合使用。

import 'package:flutter/material.dart';
/*
 * 枚舉類,標簽演示樣式
 * 圖標和文本
 * 僅圖標
 * 僅文本
 */
enum TabsDemoStyle {
 iconsAndText,
 iconsOnly,
 textOnly
}
/*
 * 頁面類
 * 圖標
 * 文本
 */
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(每個動畫幀調用它的回調一次)
class _ScrollableTabsDemoState extends State<ScrollableTabsDemo> with SingleTickerProviderStateMixin {
 /*
 * 在TabBar和TabBarView之間的坐標選項卡選擇
 * TabBar:質感設計控件,顯示水平的一行選項卡
 * TabBarView:可分布列表,顯示與當前所選標簽對應的控件
 */
 TabController _controller;
 TabsDemoStyle _demoStyle = TabsDemoStyle.iconsAndText;
 @override
 void initState() {
 super.initState();
 /*
 * 創建一個對象,用于管理TabBar和TabBarView所需的狀態
 * length:選項卡的總數,存儲所有頁面的列表中的元素個數
 */
 _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) {
 // 獲取當前主題的控件前景色
 final Color iconColor = Theme.of(context).accentColor;
 return new Scaffold(
 appBar: new AppBar(
 title: new Text('可滾動的標簽頁'),
 actions: <Widget>[
  new PopupMenuButton<TabsDemoStyle>(
  onSelected: changeDemoStyle,
  itemBuilder: (BuildContext context) => <PopupMenuItem<TabsDemoStyle>>[
  new PopupMenuItem<TabsDemoStyle>(
  value: TabsDemoStyle.iconsAndText,
  child: new Text('圖標和文本')
  ),
  new PopupMenuItem<TabsDemoStyle>(
  value: TabsDemoStyle.iconsOnly,
  child: new Text('僅圖標')
  ),
  new PopupMenuItem<TabsDemoStyle>(
  value: TabsDemoStyle.textOnly,
  child: new Text('僅文本')
  )
  ]
  ),
 ],
 bottom: new TabBar(
  // 控件的選擇和動畫狀態
  controller: _controller,
  // 標簽欄是否可以水平滾動
  isScrollable: true,
  // 標簽控件的列表
  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(
 // 控件的選擇和動畫狀態
 controller: _controller,
 // 每個標簽一個控件
 children: _allPages.map((_Page page) {
  return new Container(
  key: new ObjectKey(page.icon),
  padding: const EdgeInsets.all(12.0),
  // 質感設計卡片
  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(),
 ));
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会泽县| 盐池县| 清丰县| 宜昌市| 托克逊县| 游戏| 屯门区| 永德县| 增城市| 荥经县| 海门市| 延安市| 太仓市| 交城县| 和硕县| 太和县| 荥经县| 专栏| 吉木乃县| 固阳县| 锡林浩特市| 乌拉特后旗| 潜江市| 五莲县| 渑池县| 耒阳市| 邵武市| 扶余县| 恩施市| 莆田市| 千阳县| 沙洋县| 曲周县| 岳阳县| 时尚| 湛江市| 富阳市| 武威市| 横峰县| 扎兰屯市| 大邑县|