亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

Flutter實現(xiàn)底部菜單導(dǎo)航

2019-10-21 21:25:30
字體:
供稿:網(wǎng)友
這篇文章主要為大家詳細(xì)介紹了Flutter實現(xiàn)底部菜單導(dǎo)航,具有一定的參考價值,感興趣的小伙伴們可以參考一下
 

簡介

現(xiàn)在我們的 APP 上面都會在屏幕下方有一排的按鈕,點擊不同的按鈕可以進入不同的界面。就是說在界面的底部會有一排的按鈕導(dǎo)航??煽聪旅娴膱D示。

完成圖示

Flutter,底部菜單導(dǎo)航

程序工程目錄

Flutter,底部菜單導(dǎo)航

梳理下實現(xiàn)步驟

我們需要實現(xiàn)這個底部菜單導(dǎo)航,就需要有底部菜單的那一排圖標(biāo)按鈕。圖標(biāo)按鈕是固定在一個工具欄 “bar” 上面。然后呢,需要分別需要有按鈕對應(yīng)的界面,就是說按鈕有多少個,那么界面需要對應(yīng)的有多少個。我們來一個清單列表:

  • 按鈕圖標(biāo)區(qū)域。由于展示的方式都是一樣的,我們需要有一個單獨的控件,循環(huán)出來就好。
  • 工具欄區(qū)域。用于展示按鈕圖標(biāo),并且能固定在底部。
  • 首頁。用于將工具欄放入界面中,并且將按鈕對應(yīng)的界面作為它的子元素存放于其中。
  • 不同的按鈕對應(yīng)的界面。在我們點擊的圖標(biāo)按鈕的時候,展示不同的界面。

我們底部的按鈕是不會刷新的,界面會刷新,如何實現(xiàn)?

我們界面展示區(qū)域分為兩塊,一塊展示底部的工具欄,一塊展示頁面。下面代碼實現(xiàn):

return new MaterialApp(  home: new Scaffold(   body: new Center(    child: _currentPage // 動態(tài)的展示我們當(dāng)前的頁面   ),   bottomNavigationBar: bottomNavigationBar, // 底部工具欄  ),  theme: new ThemeData(  primarySwatch: Colors.blue, // 設(shè)置主題顏色  ), );

具體實現(xiàn)

第一步:創(chuàng)建一個 flutter 工程 
可以按照工程目錄圖中的結(jié)構(gòu),將對應(yīng)的文件建好。

第二步:修改 main.dart。 
main.dart 是我們程序的入口。就類似于 Java、C 中的 main() ,作為一個程序的入口。我們將 main.dart 作為程序的啟動入口,就不做過多的操作,只是指定去加載我們的首頁(index.dart)。

main.dart

import 'package:flutter/material.dart';import 'package:flutter_demo/index/index.dart';   // 導(dǎo)入index.dart// 這里為入口函數(shù)void main() => runApp(new MyApp());class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return new MaterialApp(  title: 'Flutter Demo',  home: new Index(),  // 指定去加載 Index頁面。 ); }}

第三步:創(chuàng)建 NavigationIconView。 
正如前面說的,我們底部的按鈕區(qū)域展示的圖標(biāo)加上文字是固定格式,所以將這一部分抽取出來,作為一個公共的 class,方便界面程序維護。

navigation_icon_view.dart

import 'package:flutter/material.dart';// 創(chuàng)建一個 Icon 展示控件class NavigationIconView { // 創(chuàng)建兩個屬性,一個是 用來展示 icon, 一個是動畫處理 final BottomNavigationBarItem item; final AnimationController controller; // 類似于 java 中的構(gòu)造方法 // 創(chuàng)建 NavigationIconView 需要傳入三個參數(shù), icon 圖標(biāo),title 標(biāo)題, TickerProvider NavigationIconView({Widget icon, Widget title, TickerProvider vsync}): item = new BottomNavigationBarItem(  icon: icon,  title: title, ), controller = new AnimationController(  duration: kThemeAnimationDuration, // 設(shè)置動畫持續(xù)的時間  vsync: vsync       // 默認(rèn)屬性和參數(shù) );}

第四步:創(chuàng)建 Index

這一步就比較重要了,因為我們需要在這個界面上面去布局,以及實現(xiàn)點擊按鈕圖標(biāo)之后,有事件觸發(fā)。正因為我們需要有事件觸發(fā),所以創(chuàng)建一個帶有狀態(tài)的 Widget(StatefulWidget)。下面的代碼注釋給的很詳細(xì)了,可以仔細(xì)看。

index.dart

import 'package:flutter/material.dart';import 'package:flutter_demo/NoticePage/notice_page.dart';import 'package:flutter_demo/home/home_page.dart';import 'package:flutter_demo/idea/idea_page.dart';import 'package:flutter_demo/market/market_page.dart';import 'package:flutter_demo/my/my_page.dart';import 'navigation_icon_view.dart'; // 如果是在同一個包的路徑下,可以直接使用對應(yīng)的文件名// 創(chuàng)建一個 帶有狀態(tài)的 Widget Indexclass Index extends StatefulWidget { // 固定的寫法 @override State<StatefulWidget> createState() => new _IndexState();}// 要讓主頁面 Index 支持動效,要在它的定義中附加mixin類型的對象TickerProviderStateMixinclass _IndexState extends State<Index> with TickerProviderStateMixin{ int _currentIndex = 0; // 當(dāng)前界面的索引值 List<NavigationIconView> _navigationViews; // 底部圖標(biāo)按鈕區(qū)域 List<StatefulWidget> _pageList; // 用來存放我們的圖標(biāo)對應(yīng)的頁面 StatefulWidget _currentPage; // 當(dāng)前的顯示頁面 // 定義一個空的設(shè)置狀態(tài)值的方法 void _rebuild() { setState((){}); } @override void initState() { super.initState(); // 初始化導(dǎo)航圖標(biāo) _navigationViews = <NavigationIconView>[  new NavigationIconView(icon: new Icon(Icons.assessment), title: new Text("首頁"), vsync: this), // vsync 默認(rèn)屬性和參數(shù)  new NavigationIconView(icon: new Icon(Icons.all_inclusive), title: new Text("想法"), vsync: this),  new NavigationIconView(icon: new Icon(Icons.add_shopping_cart), title: new Text("市場"), vsync: this),  new NavigationIconView(icon: new Icon(Icons.add_alert), title: new Text("通知"), vsync: this),  new NavigationIconView(icon: new Icon(Icons.perm_identity), title: new Text("我的"), vsync: this), ]; // 給每一個按鈕區(qū)域加上監(jiān)聽 for (NavigationIconView view in _navigationViews) {  view.controller.addListener(_rebuild); } // 將我們 bottomBar 上面的按鈕圖標(biāo)對應(yīng)的頁面存放起來,方便我們在點擊的時候 _pageList = <StatefulWidget>[  new HomePage(),  new IdeaPage(),  new MarketPage(),  new NoticePage(),  new MyPage() ]; _currentPage = _pageList[_currentIndex]; } @override Widget build(BuildContext context) { // 聲明定義一個 底部導(dǎo)航的工具欄 final BottomNavigationBar bottomNavigationBar = new BottomNavigationBar(  items: _navigationViews   .map((NavigationIconView navigationIconView) => navigationIconView.item)   .toList(), // 添加 icon 按鈕  currentIndex: _currentIndex, // 當(dāng)前點擊的索引值  type: BottomNavigationBarType.fixed, // 設(shè)置底部導(dǎo)航工具欄的類型:fixed 固定  onTap: (int index){ // 添加點擊事件  setState((){ // 點擊之后,需要觸發(fā)的邏輯事件   _navigationViews[_currentIndex].controller.reverse();   _currentIndex = index;   _navigationViews[_currentIndex].controller.forward();   _currentPage = _pageList[_currentIndex];  });  }, ); return new MaterialApp(  home: new Scaffold(   body: new Center(    child: _currentPage // 動態(tài)的展示我們當(dāng)前的頁面   ),   bottomNavigationBar: bottomNavigationBar, // 底部工具欄  ),  theme: new ThemeData(  primarySwatch: Colors.blue, // 設(shè)置主題顏色  ), ); }}

第四步:創(chuàng)建頁面

前面的步驟都是在搭建我們的基礎(chǔ),現(xiàn)在是做展示界面。由于不同的界面,對應(yīng)的源碼都是和下面的是一樣的,只是 class 的名字不一樣,就都可以使用同樣的模版復(fù)制過去就有可以了。

home_page.dart

import 'package:flutter/material.dart';class HomePage extends StatefulWidget{ @override State<StatefulWidget> createState() => new _HomePageState();}class _HomePageState extends State<HomePage> { @override Widget build(BuildContext context) { return new MaterialApp(  home: new Scaffold(  appBar: new AppBar(   title: new Text('首頁'),   actions: <Widget>[   new Container()   ],  ),  body: new Center(   child: null,  ),  ), ); }}

idea_page.dart

import 'package:flutter/material.dart';class IdeaPage extends StatefulWidget{ @override State<StatefulWidget> createState() => new _IdeaPageState();}class _IdeaPageState extends State<IdeaPage> { @override Widget build(BuildContext context) { return new MaterialApp(  home: new Scaffold(  appBar: new AppBar(   title: new Text('想法'),   actions: <Widget>[   new Container()   ],  ),  body: new Center(   child: null,  ),  ), ); }}

market_page.dart

import 'package:flutter/material.dart';class MarketPage extends StatefulWidget{ @override State<StatefulWidget> createState() => new _MarketPageState();}class _MarketPageState extends State<MarketPage> { @override Widget build(BuildContext context) { return new MaterialApp(  home: new Scaffold(  appBar: new AppBar(   title: new Text('市場'),   // 后面的省略   // ......  )  ), ); }}

剩下的界面都是一樣子的了,就不貼出來了,都是復(fù)制一下,改了一個類名,和顯示的文字而已。

第五步:啟動測試

到此我們就完成了,可以啟動程序,看下效果。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。

 


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
91免费观看| 成人黄色理论片| 精品一区二区观看| 国产精品久久久久久婷婷天堂| 亚洲精品高清视频| 欧美高清你懂得| 精品国产一区二区三区麻豆免费观看完整版| 日韩久久精品成人| 永久免费毛片在线观看| 欧美老肥妇做.爰bbww| 亚洲国产欧美视频| 精品久久视频| 女人让男人操自己视频在线观看| 欧美一区二区三区四区高清| 污污视频在线| 色啪啪.com| 东方欧美亚洲色图在线| 美女脱光内衣内裤视频久久影院| 欧美色窝79yyyycom| 国产伦子伦对白在线播放观看| 狠狠艹夜夜干| 亚欧视频在线观看| 亚洲国产欧美国产综合一区| 最新日韩在线视频| 激情伊人五月天| 好男人www社区在线视频夜恋| 在线观看欧美日韩| 欧美日本三级| 国产一区二区不卡在线| ...av二区三区久久精品| 一区二区视频在线看| www.蜜臀av| 欧美午夜不卡影院在线观看完整版免费| 国产成人精品免费在线| 夜夜嗨av一区二区三区| 国内精品400部情侣激情| 亚洲美女av黄| av免费一区二区| 亚洲 欧美 日韩 综合| 欧美激情欧美激情在线五月| 免费在线观看91| 91久久国产综合久久91猫猫| 91在线一区二区三区| 精品人妻一区二区免费| 噜噜噜狠狠夜夜躁精品仙踪林| 五月婷婷视频在线观看| 日韩不卡免费视频| 99久在线精品99re8热| 国产伦子伦对白在线播放观看| 手机av在线不卡| 在线日韩精品视频| 国产精品宾馆| 97精品人妻一区二区三区| 精品88久久久久88久久久| jizzjizzjizz欧美| 天堂久久午夜av| 免费麻豆国产一区二区三区四区| 情事1991在线| 无码国产69精品久久久久网站| 国产99视频在线观看| 在线观看成人一级片| 国产成人精品优优av| www.超级碰| 国产免费无码一区二区视频| 成人午夜免费福利| 亚洲少妇中文字幕| 视色,视色影院,视色影库,视色网| 精品久久久久久久久久久下田| 久久撸在线视频| 欧美日韩精品是欧美日韩精品| 亚洲人被黑人高潮完整版| 日韩va亚洲va欧洲va国产| 日韩图片一区| 69堂国产成人免费视频| 免费国产羞羞网站美图| 成人在线高清视频| 亚洲日产av中文字幕| 青青草久久爱| 欧美巨大黑人极品精男| 亚洲精品网址| 久久综合婷婷综合| 日韩一区二区三区不卡| 视频一区在线免费看| 国产一区二区动漫| 天天操夜夜草| 手机在线视频一区| 啦啦啦高清在线观看www| 97国产suv精品一区二区62| 成人免费视频网站在线看| 久久久综合久久| 九九热在线视频观看这里只有精品| 99精品99| 农村妇女精品一区二区| 蜜桃麻豆www久久国产精品| 欧美人善交videosg| 久久99国产精品一区| 久久综合九色综合久久久精品综合| 在线精品亚洲一区二区不卡| 久久精品国产精品亚洲毛片| 99国产精品久久一区二区三区| 黄色av免费在线观看| 欧美日韩高清在线观看| 国产一区二区在线观看免费| 亚洲国产第一区| 97国产在线观看| 欧美极品美女电影一区| www.精品av.com| 人人人妻人人澡人人爽欧美一区| 久久久影视精品| 亚洲成色www久久网站| 天天操天天干天天| 永久亚洲成a人片777777| 欧美成人午夜激情| 91久热免费在线视频| 在线播放黄色网址| 成人日韩在线视频| 大黑人交xxx极品hd| 久久―日本道色综合久久| 黄色网址在线免费| 一级aaa毛片| 欧美日韩第一| 欧美视频一二三区| 一区二区三区我不卡| 精品熟女一区二区三区| 天天夜碰日日摸日日澡性色av| 日韩成人在线网站| 久久亚洲精品小早川怜子| 三级一区在线视频先锋| 亚洲熟女乱色一区二区三区久久久| 亚洲视频在线观看一区二区| 日韩电影在线一区| 久久综合九色综合97婷婷| 国产成人免费看一级大黄| 久久中文资源| 美女视频黄免费| 亚洲精品国产精品国自产观看| 密臀av在线| 精品极品三级久久久久| 99re6这里只有精品视频在线观看| 综合图区亚洲白拍在线| 乱码第一页成人| 疯狂蹂躏欧美一区二区精品| 欧美一区二区美女| 青青色青青操| 欧美激情一区二区三区| 成熟人妻av无码专区| 不卡免费追剧大全电视剧网站| 精品国产第一福利网站| 97超碰色婷婷| 亚洲高清免费观看| av网站免费在线| 国产精品欧美亚洲777777| 欧美高清日韩| 99免费精品在线| 日韩精品极品| 亚洲奶大毛多的老太婆| 写真片福利在线播放| 国产成人自拍网站| 加勒比日本影视| 国产成人精品一区二区三区四区| 91色综合久久久久婷婷| 在线一级成人| 日本电影全部在线观看网站视频| 亚洲国产精品一区二区第四页av| 国产亚洲精品午夜高清影院| 麻豆成人精品| 精品噜噜噜噜久久久久久久久试看| 26uuu亚洲婷婷狠狠天堂| 黄色网页免费在线观看| 国产不卡在线观看| 欧美另类久久久品| 法国空姐电影在线观看| 永久看看免费大片| 日本成人在线不卡视频| 91精品久久久久久久久久久久| 日韩欧美高清一区| 国产高清在线精品| 日韩电影免费在线| 精品亚洲一区二区三区四区五区高| 佐佐木明希av| 欧美日韩不卡一区二区| 青青草成人在线| 色欧美自拍视频| 久久人人爽人人爽人人片亚洲| 久久久精品日韩欧美| 一本色道久久加勒比88综合| 国产精品欧美综合| 欧美极品jizzhd欧美仙踪林| 蜜桃视频在线观看播放| 国产va免费精品观看精品视频| av在线播放国产| 九九热这里只有在线精品视| 中文在线中文资源| japan高清日本乱xxxx| 国产亚洲一区二区三区啪| 粉嫩aⅴ一区二区三区| 狠狠综合久久av一区二区老牛| 天堂成人国产精品一区| 久久全国免费视频| 日韩中文字幕视频网| 久久一区二区三| 欧美午夜一区二区福利视频| 亚洲久久视频| 欧美野外性xxxxfeexxxx| 六月婷婷色综合| 又嫩又硬又黄又爽的视频| 亚洲人在线播放| 菠萝蜜视频网站入口| 国产黄色的视频| 国产区美女在线| 欧美精品一区二区久久久| 久久久青草青青国产亚洲免观| 一区二区三区回区在观看免费视频| 成人精品小蝌蚪| 超碰成人在线观看| 国产精品日韩一区二区| 无码人妻久久一区二区三区蜜桃| 成人在线爆射| 德国性xxxx| 国产激情在线| 欧美日韩国产精品一区二区三区| 国产情侣在线播放| 国产精品chinese| 欧美乱人伦中文字幕在线| 精品无码人妻少妇久久久久久| 黄色免费电影网站| 8x8x成人免费视频| 亚洲视频一区二区在线| jyzzz在线观看视频| gogo人体一区| 中国大陆高清aⅴ毛片| 中文字幕在线播放网址| 黄色免费看网站| 国产美女网站在线观看| 国产探花在线播放| 韩国黄色一级大片| 精品麻豆一区二区三区| 欧美一级夜夜爽| 欧美白嫩的18sex少妇| 国产一区二区三区在线观看视频| 亚洲AV无码精品色毛片浪潮| 日韩三级.com| 欧美另类精品xxxx孕妇| 91精品91久久久中77777| 久久久久久久人妻无码中文字幕爆| 日本久久久a级免费| 久久看人人摘| 91www在线观看| 青青草视频在线免费直播| 国产精选一区| 亚洲中文一区二区三区| 一区二区精品国产| 国产精品网友自拍| 国产午夜在线观看| 老司机精品视频在线| 日本在线成人一区二区| 欧美日高清视频| 五月婷婷丁香六月| 51国偷自产一区二区三区| 我要色综合中文字幕| 岛国一区二区在线观看| 一级成人黄色片| 国产欧美日韩在线一区二区| 给我免费播放片在线观看| 色狠狠一区二区三区香蕉| 国产aⅴ激情无码久久久无码| 日韩av网站导航| 国产69精品久久久久9999小说| 精品国产3级a| 欧美xxxx免费虐| 熟妇高潮一区二区高潮| 一本加勒比北条麻妃| 91精品国产亚洲| 欧美做爰性欧美大fennong| 在线一区视频| 亚洲精品国产精品乱码在线观看| 亚洲人成在线观看一区二区| 日韩精品亚洲视频| 国产亚洲欧洲一区高清在线观看| 精品久久久久久久久久久久久久| 免费在线观看国产黄| 国产日韩中文字幕| 欧美成人国产精品一区二区| 精品视频一区二区不卡| 色综合天天综合在线视频| 久久久久久久成人| 国产综合色在线视频区| 亚洲私人影院| 日韩国产激情在线| 欧美电影免费| 亚洲精品aⅴ| 福利视频一区| 欧美jizzhd欧美| 任你操这里只有精品| 国产欧美日韩小视频| av二区三区| 欧美性猛交xxxx乱大交极品| 色婷婷综合久久久久久| 国产+成+人+亚洲欧洲在线| 国产精品综合不卡av| 欧美巨大黑人极品精男| 粉嫩一区二区三区性色av| 亚洲精品国产日韩| 久久久久亚洲av片无码下载蜜桃| 一区二区日韩免费看| 日韩电影免费在线观看网站| 香蕉久久免费影视| 午夜裸体女人视频网站在线观看| 久久亚洲春色中文字幕久久久| 一本色道久久88| 国产乱码一区二区| 欧美高清激情视频| 日韩一区二区三区精品视频| 精品国产一区二区三区四区阿崩| 国产高清一级片| 成人午夜视频在线观看免费| 欧美高清在线精品一区| 日本xxxx黄色| 亚洲一区二区美女| 国产精品久久久久久久久| 国产精品一区二区久久久| 欧美高清videosex极品| h狠狠躁死你h高h| 日韩 欧美 自拍| 男人的午夜天堂| 国产免费一区二区三区在线能观看| 欧美一区欧美二区| 中文字幕精品一区日韩|