• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網(wǎng)絡科技有限公司!
    電話圖標 余先生:13699882642

    網(wǎng)站百科

    為您解碼網(wǎng)站建設的點點滴滴

    Flutter實現(xiàn)常用底部欄

    發(fā)表日期:2018-11 文章編輯:小燈 瀏覽次數(shù):2618

    文章介紹

    之前寫過一篇Flutter介紹的文章,然后因為一些其他事情停了好久沒寫了。這人一懶下來就懶成習慣了哈哈。這次的文章主要是介紹用Flutter實現(xiàn)一個app常用的底部tab欄,類似于安卓里面的BottomNaivigationView。有三個頁面可以點擊切換這樣子。

    項目結構

    項目結構

    FirstTab里面的代碼:

    import 'package:flutter/material.dart';class FirstTab extends StatefulWidget { @override _FirstTabState createState() => _FirstTabState(); }class _FirstTabState extends State<FirstTab> { @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text('第一個界面'), ), body: new Center( child: new Text('first'), ), ); } } 

    就是一個簡單的界面,一個標題欄文本,和一個居中的文本。第二個和第三個界面也都是一樣類似的,文本不同而已。這里教大家一個小技巧,在AndroidStudio里面創(chuàng)建Widget的快捷鍵。

    stful ===> 創(chuàng)建一個StatefulWidget,并且會自動生成State,很省事
    stless ===> 創(chuàng)建一個StatelessWidget

    Widget生命周期

    在把這三個界面整合到一起之前,我想先插入一點很重要的知識。在Flutter里面萬物皆是Widget,所以我想先介紹一下Widget的生命周期。但是說Widget的生命周期這個說法其實是不準確的。
    因為Widget分為StatefulWidget和StatelessWidget,可變的是StatefulWidget,它的可變又是通過修改State來完成的,等下在代碼里面可以看到有@override標識的生命周期方法其實是在繼承于State的狀態(tài)類里面寫的。所以說成是State的生命周期更加準確一點。

    方法名稱 狀態(tài)
    initState 插入渲染樹時調用,只調用一次
    didChangeDependencies state依賴的對象發(fā)生變化時調用
    didUpdateWidget 組件狀態(tài)改變時候調用,可能會調用多次
    build 構建Widget時調用
    deactivate 當移除渲染樹的時候調用
    dispose 組件即將銷毀時調用

    完整的生命如圖所有的方法和分階段執(zhí)行的圖解,很詳細了。圖片是從閑魚技術那里copy來的。推薦大家都關注一下閑魚技術,他們確實在Flutter這一塊有很多自己的實踐文章


    生命周期

    主入口

    現(xiàn)在我們把三個頁面放到main.dart里面,做出一個類似BottomNaivigationView的效果。
    首先在main.dart文件里面導入之前我們寫好的三個tab頁

    import './pages/FirstTab.dart'; import './pages/SecondTab.dart'; import './pages/ThirdTab.dart'; 

    我這里因為是已經(jīng)寫完了,就是使用過這三個了,字體不會是灰色帶波浪線的。所以大家碰到灰色帶波浪線的話也不要慌張,寫完就好了。
    main.dart完整代碼:

    import 'package:flutter/material.dart'; import './pages/FirstTab.dart'; import './pages/SecondTab.dart'; import './pages/ThirdTab.dart';void main(){ runApp( new MaterialApp( title:'tabdemo', home:new HomePage() ) ); }class HomePage extends StatefulWidget { @override _HomePageState createState() =>new _HomePageState(); }class _HomePageState extends State<HomePage> with SingleTickerProviderStateMixin{//Tab頁的控制器,可以用來定義Tab標簽和內容頁的坐標 TabController tabcontroller; //生命周期方法插入渲染樹時調用,只調用一次 @override void initState() { super.initState(); tabcontroller = new TabController( length: 3, //Tab頁的個數(shù) vsync: this //動畫效果的異步處理,默認格式 ); }//生命周期方法構建Widget時調用 @override Widget build(BuildContext context) { return new Scaffold( body: new TabBarView( controller: tabcontroller, children: <Widget>[ //創(chuàng)建之前寫好的三個頁面,萬物皆是Widget new FirstTab(), new SecondTab(), new ThirdTab(), ], ), bottomNavigationBar: new Material( //底部欄整體的顏色 color: Colors.blueAccent, child: new TabBar( controller: tabcontroller, tabs: <Tab>[ new Tab(text: "第一個",icon: new Icon(Icons.android)), new Tab(text: "第二個",icon: new Icon(Icons.home)), new Tab(text: "第三個",icon: new Icon(Icons.accessibility)), ], //tab被選中時的顏色,設置之后選中的時候,icon和text都會變色 labelColor: Colors.amber, //tab未被選中時的顏色,設置之后選中的時候,icon和text都會變色 unselectedLabelColor: Colors.black, ), ) ); }//組件即將銷毀時調用 @override void dispose() { //釋放內存,節(jié)省開銷 tabcontroller.dispose(); super.dispose(); } } 

    1.首先main方法是主入口。title里面的標題就是app在后臺時顯示的名字。
    2.HomePage是一個有狀態(tài)的組件,通過修改_HomePageState 來修改他顯示內容
    3._HomePageState 里面有三個方法initState,build,dispose。這三個都是生命周期方法,上面表格里面有詳細描述,在這里是按照我代碼里面的順序執(zhí)行的。
    4.TabController相當于是tabbar的控制器,在build方法里面創(chuàng)建控件的時候作為參數(shù)傳入
    5.build方法里面先是創(chuàng)建了一個Scaffold,然后里面放入了控件,也就是界面顯示出來的東西,類似于安卓里面的view??丶木唧w用法可參考 Widget目錄
    6.最后在dispose組件銷毀的時候銷毀掉tabcontroller

    運行效果

    最終效果

    其實實現(xiàn)的也比較簡單,就是三個可以切換的頁面,既可以點擊切換,又可以滑動切換。

    補充說明

    我的代碼里面有很多new關鍵字,其實在Dart2里面這些new是可以省略掉的,但是因為我寫Java寫習慣了,為了便于大家閱讀,我還是加了new的。
    然后其實我現(xiàn)在也只是一個小菜雞,一些復雜的界面自己現(xiàn)在也實現(xiàn)不了,還在學習之中。后期抽空會把這三個子界面完善出來,盡量實現(xiàn)一些常用的東西,比如列表,界面跳轉,手勢,動畫之類的。暫時的想法是這樣。謝謝閱讀,大家周末愉快~

    代碼地址


    本頁內容由塔燈網(wǎng)絡科技有限公司通過網(wǎng)絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網(wǎng)頁中由涉嫌抄襲的內容,請及時與我們聯(lián)系,并提供相關證據(jù),工作人員會在5工作日內聯(lián)系您,一經(jīng)查實,本站立刻刪除侵權內容。本文鏈接:http://www.juherenli.com/17585.html
    相關APP開發(fā)