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

    網(wǎng)站百科

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

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

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

    文章介紹

    之前寫(xiě)過(guò)一篇Flutter介紹的文章,然后因?yàn)橐恍┢渌虑橥A撕镁脹](méi)寫(xiě)了。這人一懶下來(lái)就懶成習(xí)慣了哈哈。這次的文章主要是介紹用Flutter實(shí)現(xiàn)一個(gè)app常用的底部tab欄,類似于安卓里面的BottomNaivigationView。有三個(gè)頁(yè)面可以點(diǎn)擊切換這樣子。

    項(xiàng)目結(jié)構(gòu)

    項(xiàng)目結(jié)構(gòu)

    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('第一個(gè)界面'), ), body: new Center( child: new Text('first'), ), ); } } 

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

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

    Widget生命周期

    在把這三個(gè)界面整合到一起之前,我想先插入一點(diǎn)很重要的知識(shí)。在Flutter里面萬(wàn)物皆是Widget,所以我想先介紹一下Widget的生命周期。但是說(shuō)Widget的生命周期這個(gè)說(shuō)法其實(shí)是不準(zhǔn)確的。
    因?yàn)閃idget分為StatefulWidget和StatelessWidget,可變的是StatefulWidget,它的可變又是通過(guò)修改State來(lái)完成的,等下在代碼里面可以看到有@override標(biāo)識(shí)的生命周期方法其實(shí)是在繼承于State的狀態(tài)類里面寫(xiě)的。所以說(shuō)成是State的生命周期更加準(zhǔn)確一點(diǎn)。

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

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


    生命周期

    主入口

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

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

    我這里因?yàn)槭且呀?jīng)寫(xiě)完了,就是使用過(guò)這三個(gè)了,字體不會(huì)是灰色帶波浪線的。所以大家碰到灰色帶波浪線的話也不要慌張,寫(xiě)完就好了。
    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頁(yè)的控制器,可以用來(lái)定義Tab標(biāo)簽和內(nèi)容頁(yè)的坐標(biāo) TabController tabcontroller; //生命周期方法插入渲染樹(shù)時(shí)調(diào)用,只調(diào)用一次 @override void initState() { super.initState(); tabcontroller = new TabController( length: 3, //Tab頁(yè)的個(gè)數(shù) vsync: this //動(dòng)畫(huà)效果的異步處理,默認(rèn)格式 ); }//生命周期方法構(gòu)建Widget時(shí)調(diào)用 @override Widget build(BuildContext context) { return new Scaffold( body: new TabBarView( controller: tabcontroller, children: <Widget>[ //創(chuàng)建之前寫(xiě)好的三個(gè)頁(yè)面,萬(wàn)物皆是Widget new FirstTab(), new SecondTab(), new ThirdTab(), ], ), bottomNavigationBar: new Material( //底部欄整體的顏色 color: Colors.blueAccent, child: new TabBar( controller: tabcontroller, tabs: <Tab>[ new Tab(text: "第一個(gè)",icon: new Icon(Icons.android)), new Tab(text: "第二個(gè)",icon: new Icon(Icons.home)), new Tab(text: "第三個(gè)",icon: new Icon(Icons.accessibility)), ], //tab被選中時(shí)的顏色,設(shè)置之后選中的時(shí)候,icon和text都會(huì)變色 labelColor: Colors.amber, //tab未被選中時(shí)的顏色,設(shè)置之后選中的時(shí)候,icon和text都會(huì)變色 unselectedLabelColor: Colors.black, ), ) ); }//組件即將銷毀時(shí)調(diào)用 @override void dispose() { //釋放內(nèi)存,節(jié)省開(kāi)銷 tabcontroller.dispose(); super.dispose(); } } 

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

    運(yùn)行效果

    最終效果

    其實(shí)實(shí)現(xiàn)的也比較簡(jiǎn)單,就是三個(gè)可以切換的頁(yè)面,既可以點(diǎn)擊切換,又可以滑動(dòng)切換。

    補(bǔ)充說(shuō)明

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

    代碼地址


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

    多一份參考,總有益處

    聯(lián)系深圳網(wǎng)站公司塔燈網(wǎng)絡(luò),免費(fèi)獲得網(wǎng)站建設(shè)方案及報(bào)價(jià)

    咨詢相關(guān)問(wèn)題或預(yù)約面談,可以通過(guò)以下方式與我們聯(lián)系

    業(yè)務(wù)熱線:余經(jīng)理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    久久久精品一区二区三区| 午夜精品视频任你躁| 国产精品成人一区二区| 精品一卡2卡三卡4卡乱码精品视频| 久久久精品国产亚洲成人满18免费网站 | 精品亚洲成AV人在线观看| 久久国产香蕉一区精品| 国产精品久久久久国产精品| 久久久久一级精品亚洲国产成人综合AV区| 亚洲精品天堂在线观看| 久热re这里只有精品视频| 精品国产AⅤ一区二区三区4区| 日韩精品电影在线观看| 精品国产福利在线观看| 99re在线视频精品| 久久精品丝袜高跟鞋| 久久精品成人免费观看97| 国产成人精品影院狼色在线| 四虎成人精品一区二区免费网站| 精品国产一区二区三区色欲| 少妇人妻偷人精品视频| 日本精品不卡视频| 免费精品久久天干天干| 久久精品国产99久久久香蕉| 无码乱码观看精品久久| 久久丫精品国产亚洲av不卡| 九九99精品久久久久久| 99久久免费国产精品热| 久久精品99无色码中文字幕| 亚洲精品无码日韩国产不卡?V| 国产精品手机在线亚洲| 精品国产三级在线观看| 国内精品免费视频自在线| 久久久g0g0午夜无码精品| 2021国产精品久久精品| 美国发布站精品视频| 亚洲精品无码专区| 国产人妻777人伦精品hd| 在线观看精品一区| 国产精品白浆在线播放 | 精品日韩一区二区三区视频|