專案常用效果!Flutter仿頭條頂部tab切換實現!
概述
今天主要實現一個仿頭條頂部
tab
切換實現,這種效果在專案中同樣經常用到, 接下來我們就從頭開始實現。
效果圖
老規矩,開局先上效果圖。

仿頭條頂部tab切換實現
要實現這樣的效果,需要使用
TabBar
進行實現。我們先講一下
TabBar
的基本屬性。
TabBar 和 TabBarView
TabBar
是屬於
AppBar
中的一個元件,通常和
TabBarView
結合使用。
TabBar構造方法及常用屬性簡介
const TabBar({ Key key, @required this.tabs, this.controller, this.indicatorColor, this.labelColor, this.unselectedLabelColor, })
屬性名 | 屬性值型別 | 說明 |
---|---|---|
tabs | Tab型別的控制元件集合 | 要顯示的所有tab子項 |
controller | TabController型別 | 主要用來監聽tab的切換 |
indicatorColor | Color | tab子項指示器的顏色 |
labelColor | Color | 子項文字的顏色 |
unselectedLabelColor | Color | 未選中子項文字的顏色 |
TabBarView構造方法及常用屬性簡介
const TabBarView({ Key key, @required this.children, this.controller, })
屬性名 | 屬性值型別 | 說明 |
---|---|---|
children | Widget的集合 | 對應TabBar每個子項要顯示的具體內容 |
controller | TabController型別 | 主要用來監聽tab的切換 |
簡單使用
接下來我們將使用兩種方式實現基本使用,第一種方式是配合
DefaultTabController
使用,另外一種是配合
TabController
使用。在我們使用
TabBar
的時候必須放在
Scaffold
控制元件的
AppBar
中,如果我們的
App
中
Scaffold
無法修改, 那我們需要在想要實現tab效果的頁面上包裹一層
Scaffold
元件,要使用TabBar元件,必須為其指定TabController,要不然 會報錯,我們先看第一種實現方式,在
Scaffold
元件外面包裹
DefaultTabController
實現。
DefaultTabController實現
首先,我們先準備需要切換的
tab
子項的集合和對應
tab
子項的具體顯示內容。
// 需要顯示的tab子項集合 final tabs = <Tab>[ Tab( text: "熱門", ), Tab( text: "新聞", ), ]; // 對應上述tab切換後具體需要顯示的頁面內容 final tabBarViews = <Widget>[ Center( child: Text("熱門Tab對應的介面"), ), Center( child: Text("新聞Tab對應的介面"), ), ];
然後再
HomePage
頁面定義一個
TabBar
實現。
DefaultTabController( length: tabs.length, // tab的個數 child: Scaffold( appBar: AppBar( title: TabBar( tabs: tabs, ), ), body: TabBarView( children: tabBarViews, ), ), );
正常情況下,我們的
TabBar
應該是對應
appBar
中的
bottom
屬性的,但此處我們解除安裝了
title
屬性下,是因為我們上層已經 有了一個
appBar
了,如果再把
TabBar
對應的寫在
appBar的bottom
屬性上,就會導致
appBar
留有一個空白非常難看,效果如下。 所以我們定義在了
title
屬性上。

TabController實現
上述實現方式有個侷限,就是我們點選切換
tab
的時候,往往需要監聽同時更改頁面狀態。所以我們以
TabController
實現。 首先先看一下
TabController
的構造方法及屬性。
TabController({ int initialIndex = 0, @required this.length, @required TickerProvider vsync });
屬性名 | 屬性值型別 | 說明 |
---|---|---|
initialIndex | int | 初始選擇的tab下標 |
length | int | tab的個數 |
vsync | TickerProvider | 提供動畫等行為 |
要實現能動態改變狀態的
tab
切換效果必須先繼承
StatefulWidget
,因為
TabController
需要
TickerProvider
,所以我們同時 讓我們
state
類
Mixins SingleTickerProviderStateMixin
這個類。從而更容易的實現
TabController
,看一下具體的程式碼實現。
class ThirdPage extends StatefulWidget { @override State createState() => _ThirdPageState(); } class _ThirdPageState extends State<ThirdPage> with SingleTickerProviderStateMixin { TabController _tabController; @override void initState() { super.initState(); _tabController = TabController(length: tabs.length, vsync: this); _tabController.addListener(() => print("當前點選的是第${_tabController.index}個tab")); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: TabBar( controller: _tabController, tabs: tabs, ), ), body: TabBarView( controller: _tabController, children: tabBarViews, ), ); } }
至此,我們的仿頭條
tab
切換效果已經實現了。

上面是我入門時的學習內容: Flutte從入門到進階實戰學習影片,可以在這裡免費分享給大家,關注+點贊,簡信我【flutter】就行,篇幅有限,下篇文章繼續講解其他的內容。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2675521/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flutter仿頭條頂部tab切換實現Flutter
- 用CSS實現Tab頁切換效果CSS
- html兩種方法來實現tab切換效果HTML
- 用CSS實現tab切換CSS
- Android RecyclerView實現頭部懸浮吸頂效果AndroidView
- 用純css實現Tab切換CSS
- Vue實現內部元件輪播切換效果Vue元件
- 純CSS實現Tab欄的切換CSS
- flutter實戰6:TAB頁面切換免重繪Flutter
- 【Android】 banner+tab吸頂+viewpager切換+重新整理載入之實現AndroidViewpager
- javascript實現tab切換的四種方法JavaScript
- 實現Vue專案主題切換Vue
- 仿京東、淘寶首頁,通過兩層巢狀的RecyclerView實現tab的吸頂效果巢狀View
- [前端外掛] js返回頂部 效果實現前端JS
- OpenGL ES 實現頭部形變和頭部晃動效果
- vue 實現tab切換動態載入不同的元件Vue元件
- Blazor如何實現類似於微信的Tab切換?Blazor
- flutter 自定義tab導航-頂部導航-底部導航Flutter
- 前端小demo——tab切換前端
- 用Flutter實現一個仿Twitter的點贊效果Flutter
- Android 高仿騰訊新聞視訊切換效果Android
- Flutter UI使用Provide實現主題切換FlutterUIIDE
- vue2.0實現底部導航切換效果Vue
- 簡單實現一個全面屏切換效果
- Vue 全家桶仿原生App切換效果和頁面快取實踐VueAPP快取
- Tab鍵切換選擇物件物件
- 直播軟體搭建,利用原生JS實現回到頂部以及吸頂效果JS
- app直播原始碼,利用原生JS實現回到頂部以及吸頂效果APP原始碼JS
- flutter 暗黑模式切換過渡動畫實現Flutter模式動畫
- 使用ViewPager和TabLayout來實現滑動切換效果ViewpagerTabLayout
- CSS實現頁面切換時的滑動效果CSS
- React實戰篇(React仿今日頭條)React
- 實現web置頂效果Web
- 使用Bootstrap tab頁切換的使用boot
- 高階UI特效之仿3D翻轉切換效果UI特效3D
- Flutter仿掘金點贊效果Flutter
- 回到頂部效果之加速置頂
- flutter實戰專案,教你使用flutter打造仿微信app頁面!FlutterAPP