flutter實(shí)現(xiàn)appbar下選項(xiàng)卡切換
本文實(shí)例為大家分享了flutter實(shí)現(xiàn)appbar下選項(xiàng)卡切換的具體代碼,供大家參考,具體內(nèi)容如下
TabBar 、Tab、TabBarView 結(jié)合實(shí)現(xiàn)
這里實(shí)現(xiàn)的是appbar下的選項(xiàng)卡
import 'package:flutter/material.dart'; /** * 有狀態(tài)StatefulWidget * 繼承于 StatefulWidget,通過 State 的 build 方法去構(gòu)建控件 */ class TabBarAndTopTab extends StatefulWidget { 通過構(gòu)造方法傳值 TabBarAndTopTab(); //主要是負(fù)責(zé)創(chuàng)建state @override _DemoStateWidgetState createState() => _DemoStateWidgetState(); } /** * 在 State 中,可以動(dòng)態(tài)改變數(shù)據(jù) * 在 setState 之后,改變的數(shù)據(jù)會(huì)觸發(fā) Widget 重新構(gòu)建刷新 */ class _DemoStateWidgetState extends State<TabBarAndTopTab> with SingleTickerProviderStateMixin { _DemoStateWidgetState(); List tabs = ["首頁", "發(fā)現(xiàn)", "我的", "設(shè)置"]; //用于控制/監(jiān)聽Tab菜單切換 //TabBar和TabBarView正是通過同一個(gè)controller來實(shí)現(xiàn)菜單切換和滑動(dòng)狀態(tài)同步的。 TabController tabController; @override void initState() { ///初始化,這個(gè)函數(shù)在生命周期中只調(diào)用一次 super.initState(); tabController = TabController(length: tabs.length, vsync: this); } @override void didChangeDependencies() { ///在initState之后調(diào) Called when a dependency of this [State] object changes. super.didChangeDependencies(); } @override Widget build(BuildContext context) { return buildTabScaffold(); } //通過“bottom”屬性來添加一個(gè)導(dǎo)航欄底部tab按鈕組,將要實(shí)現(xiàn)的效果如下: Widget buildTabScaffold() { return Scaffold( appBar: AppBar( title: Text('標(biāo)題'), //設(shè)置選項(xiàng)卡 bottom: buildTabBar(), //設(shè)置標(biāo)題居中 centerTitle: true, ), //設(shè)置選項(xiàng)卡對(duì)應(yīng)的page body: buildBodyView(), ); } //當(dāng)整個(gè)頁面dispose時(shí),記得把控制器也dispose掉,釋放內(nèi)存 @override void dispose() { tabController.dispose(); super.dispose(); } buildBodyView() { //構(gòu)造 TabBarView Widget tabBarBodyView = TabBarView( controller: tabController, //創(chuàng)建Tab頁 children: tabs.map((e) { return Container( alignment: Alignment.center, child: Text(e, textScaleFactor: 1), ); }).toList(), ); return tabBarBodyView; } buildTabBar() { //構(gòu)造 TabBar Widget tabBar = TabBar( //tabs 的長(zhǎng)度超出屏幕寬度后,TabBar,是否可滾動(dòng) //設(shè)置為false tab 將平分寬度,為true tab 將會(huì)自適應(yīng)寬度 isScrollable: false, //設(shè)置tab文字得類型 labelStyle: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), //設(shè)置tab選中得顏色 labelColor: Colors.white, //設(shè)置tab未選中得顏色 unselectedLabelColor: Colors.white70, //設(shè)置自定義tab的指示器,CustomUnderlineTabIndicator //若不需要自定義,可直接通過 //indicatorColor 設(shè)置指示器顏色 //indicatorWight 設(shè)置指示器厚度 //indicatorPadding //indicatorSize 設(shè)置指示器大小計(jì)算方式 ///指示器大小計(jì)算方式,TabBarIndicatorSize.label跟文字等寬,TabBarIndicatorSize.tab跟每個(gè)tab等寬 indicatorSize: TabBarIndicatorSize.tab, //生成Tab菜單 controller: tabController, //構(gòu)造Tab集合 tabs: tabs.map((e) => Tab(text: e)).toList()); return tabBar; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實(shí)現(xiàn)定制返回按鈕動(dòng)畫效果的方法
這篇文章主要介紹了Android實(shí)現(xiàn)定制返回按鈕動(dòng)畫效果的方法,涉及Android控件及動(dòng)畫的相關(guān)操作技巧,需要的朋友可以參考下2016-02-02Android基于訊飛語音SDK實(shí)現(xiàn)語音識(shí)別
本例子是一個(gè)調(diào)用訊飛語音識(shí)別SDK的例子源碼是一個(gè)最純凈的Demo比較容易看懂。實(shí)現(xiàn)的是點(diǎn)擊按鈕開始語音監(jiān)聽,手機(jī)需要聯(lián)網(wǎng),2/3G的均可,希望本文對(duì)大家學(xué)習(xí)Android有所幫助2016-06-06Android編程實(shí)現(xiàn)屏幕禁止休眠的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)屏幕禁止休眠的方法,分析了Android的Manifest.xml設(shè)置與代碼實(shí)現(xiàn)兩種操作技巧,需要的朋友可以參考下2016-10-10Android使用Intent顯示實(shí)現(xiàn)頁面跳轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Android使用Intent顯示實(shí)現(xiàn)頁面跳轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08android studio library 模塊中正確引用aar的實(shí)例講解
下面小編就為大家分享一篇android studio library 模塊中正確引用aar的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android自定義ViewFlipper實(shí)現(xiàn)滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewFlipper實(shí)現(xiàn)滾動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08Android滑動(dòng)刪除數(shù)據(jù)功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android滑動(dòng)刪除功能2017-01-01Android實(shí)現(xiàn)購物車添加物品的動(dòng)畫效果
本文主要介紹了Android實(shí)現(xiàn)購物車添加物品動(dòng)畫效果的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-03-03