flutter實現(xiàn)appbar下選項卡切換
本文實例為大家分享了flutter實現(xiàn)appbar下選項卡切換的具體代碼,供大家參考,具體內(nèi)容如下
TabBar 、Tab、TabBarView 結(jié)合實現(xiàn)

這里實現(xiàn)的是appbar下的選項卡
import 'package:flutter/material.dart';
/**
* 有狀態(tài)StatefulWidget
* 繼承于 StatefulWidget,通過 State 的 build 方法去構(gòu)建控件
*/
class TabBarAndTopTab extends StatefulWidget {
通過構(gòu)造方法傳值
TabBarAndTopTab();
//主要是負責創(chuàng)建state
@override
_DemoStateWidgetState createState() => _DemoStateWidgetState();
}
/**
* 在 State 中,可以動態(tài)改變數(shù)據(jù)
* 在 setState 之后,改變的數(shù)據(jù)會觸發(fā) Widget 重新構(gòu)建刷新
*/
class _DemoStateWidgetState extends State<TabBarAndTopTab>
with SingleTickerProviderStateMixin {
_DemoStateWidgetState();
List tabs = ["首頁", "發(fā)現(xiàn)", "我的", "設(shè)置"];
//用于控制/監(jiān)聽Tab菜單切換
//TabBar和TabBarView正是通過同一個controller來實現(xiàn)菜單切換和滑動狀態(tài)同步的。
TabController tabController;
@override
void initState() {
///初始化,這個函數(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”屬性來添加一個導(dǎo)航欄底部tab按鈕組,將要實現(xiàn)的效果如下:
Widget buildTabScaffold() {
return Scaffold(
appBar: AppBar(
title: Text('標題'),
//設(shè)置選項卡
bottom: buildTabBar(),
//設(shè)置標題居中
centerTitle: true,
),
//設(shè)置選項卡對應(yīng)的page
body: buildBodyView(),
);
}
//當整個頁面dispose時,記得把控制器也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 的長度超出屏幕寬度后,TabBar,是否可滾動
//設(shè)置為false tab 將平分寬度,為true tab 將會自適應(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è)置指示器大小計算方式
///指示器大小計算方式,TabBarIndicatorSize.label跟文字等寬,TabBarIndicatorSize.tab跟每個tab等寬
indicatorSize: TabBarIndicatorSize.tab,
//生成Tab菜單
controller: tabController,
//構(gòu)造Tab集合
tabs: tabs.map((e) => Tab(text: e)).toList());
return tabBar;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android RecyclerView實現(xiàn)下拉刷新和上拉加載更多
這篇文章主要為大家詳細介紹了Android RecyclerView實現(xiàn)下拉刷新和上拉加載更多,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
Android實現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器
這篇文章主要介紹了Android實現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08
Android源碼學(xué)習(xí)之工廠方法模式應(yīng)用及優(yōu)勢介紹
工廠方法模式定義:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類,感興趣的朋友可以了解下哦2013-01-01
Android使用OKHttp庫實現(xiàn)視頻文件的上傳到服務(wù)器功能
這篇文章主要介紹了Android使用OKHttp庫實現(xiàn)視頻文件的上傳到服務(wù)器功能,需要的朋友可以參考下2018-03-03
詳解Android中Fragment的兩種創(chuàng)建方式
本篇文章主要介紹了Android中Fragment的兩種創(chuàng)建方式,具有一定的參考價值,有興趣的可以了解一下。2016-12-12
Android Path繪制貝塞爾曲線實現(xiàn)QQ拖拽泡泡
本文主要介紹Android Path繪制貝塞爾曲線,這里整理相關(guān)資料并運用貝塞爾曲線實現(xiàn)QQ拖拽泡泡的示例,有興趣的小伙伴可以參考下2016-09-09
Android EasyPermissions官方庫高效處理權(quán)限相關(guān)教程
Easypermissions簡化了Android M的運行時權(quán)限的申請、結(jié)果處理、判斷等步驟。這篇文章主要介紹了Android EasyPermissions官方庫高效處理權(quán)限相關(guān)教程,需要的朋友可以參考下2017-11-11

