日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 系統 > Android > 正文

Flutter實現底部菜單導航

2019-10-21 21:25:30
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了Flutter實現底部菜單導航,具有一定的參考價值,感興趣的小伙伴們可以參考一下
 

簡介

現在我們的 APP 上面都會在屏幕下方有一排的按鈕,點擊不同的按鈕可以進入不同的界面。就是說在界面的底部會有一排的按鈕導航。可看下面的圖示。

完成圖示

Flutter,底部菜單導航

程序工程目錄

Flutter,底部菜單導航

梳理下實現步驟

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

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

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

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

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

具體實現

第一步:創建一個 flutter 工程 
可以按照工程目錄圖中的結構,將對應的文件建好。

第二步:修改 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';   // 導入index.dart// 這里為入口函數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頁面。 ); }}

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

navigation_icon_view.dart

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

第四步:創建 Index

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

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

第四步:創建頁面

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

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('市場'),   // 后面的省略   // ......  )  ), ); }}

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

第五步:啟動測試

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。

 


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
高清一区二区| www.狠狠| 欧美三级网址| 中文字幕日韩欧美在线视频| www.xxxx精品| 中文字幕在线看精品乱码| 日韩精品在线免费看| 日韩视频中文| 99视频一区| 91欧美日韩在线| 欧美日韩国产一区中文午夜| 欧美日韩国产在线| 日韩欧美高清在线| 日韩精品视频免费| 日韩视频精品| 久久香蕉av| 欧美日韩第一| 日韩一级二级三级| 欧美专区中文字幕| 国产欧美日韩亚州综合| 日韩欧美资源站| 91精品国产综合久久久久久漫画| 99久久精品国产亚洲| 国产aa精品| 亚洲综合日韩中文字幕v在线| 亚洲视频在线观看日本a| 精品av中文字幕在线毛片| 亚洲综合中文字幕在线| 久久99精品久久久久婷婷| va中文字幕| 国产农村妇女精品一二区| 欧美91精品| 三级网站免费观看| 日韩中文字幕在线一区| 日韩欧美久久久| 国产激情久久| 国产不卡视频在线| 日韩av一区二区在线| 久久蜜桃一区二区| 中文字幕在线国产| 在线观看一区日韩| 日韩精品在线观看视频| 91精品国产色综合久久不卡蜜臀| 欧美.日韩.国产.一区.二区| 日本不卡高清视频一区| 国产欧美日韩三级| 国产欧亚日韩视频| av免费观看网站| 中文字幕久精品免费视频| 久久福利视频一区二区| 日韩手机在线观看视频| 国产高清精品在线| 欧美日韩在线第一页| a天堂在线资源| 一级日本免费的| 亚洲一区在线视频观看| 日韩精品视频在线| 欧美日韩国产区| 天天综合天天| 国产在线日韩欧美| 亚洲午夜av| 国产999在线观看| 精品国产不卡一区二区| 国产美女主播视频一区| 日本a口亚洲| 免费视频国产一区| 亚洲区中文字幕| 国产欧美日韩在线观看| 91精品国产综合久久蜜臀| 中文字幕久精品免费视频| 国产一级久久久| 欧美日韩夫妻久久| 91精品国产91久久久| 精品国产1区二区| 亚洲黄在线观看| 亚洲女人天堂色在线7777| 久久久综合av| 欧美日韩人人澡狠狠躁视频| 伊人www22综合色| 欧美日韩亚洲系列| 91精品在线观| 国产欧美第一页| 精品人妻一区二区免费视频| 中文字幕亚洲一区在线观看| 日韩高清在线不卡| 中文字幕 乱码 中文乱码91| 欧美一级在线观看| 欧美日韩在线视频免费观看| 久久婷婷国产| 日韩免费高清一区二区| 国产欧美日韩最新| 国产小视频在线观看| 中文字幕在线视频网| 91精品国产91久久久久久三级| 国产在线中文字幕| 激情综合色综合久久| 欧美日韩国产一中文字不卡| 午夜福利一区二区三区| www日韩在线观看| 欧美一级一级性生活免费录像| 国产95在线|亚洲| 国产91久久久久| 日本亚洲欧美天堂免费| 中文字幕亚洲字幕| 国产xxx在线| 日韩视频在线免费播放| 亚洲国产欧美91| 在线国产91| 欧美特黄一区| 精品国产1区2区3区| 一区二区三区鲁丝不卡| 一区二区三区精品在线| 日韩精品在线看| 欧美日韩国产一区中文午夜| 九九九精品视频| 日韩精品综合在线| 欧美二三四区| 91精品久久久久久久久久| 国产啊啊啊视频在线观看| 91精品国产自产91精品| 91欧美日韩麻豆精品| 一区二区91| 国产丝袜欧美中文另类| 精品久久电影| 最近中文字幕在线中文视频| 国产手机精品视频| 三级精品视频| 国产欧美综合在线| 国产成人精品三级| 成人ww免费完整版在线观看| 国产福利免费在线观看| a在线观看免费视频| 亚州黄色一级| 欧美片网站免费| 日韩不卡一二三区| 欧美一级在线观看| 一区二区精品| 日韩av中文字幕一区| 91精品日本| 精品日韩av| 精品成人久久av| 在线一区二区不卡| 日韩不卡在线观看| 亚洲欧洲日产国码av系列天堂| 亚洲视频在线观看日本a| 国产黄色在线播放| 中文字幕日韩亚洲| 国产欧美 在线欧美| 91精品在线观看入口| 欧美久久在线观看| 91精品国产全国免费观看| 日韩精品 欧美| 日韩免费视频一区| 在线欧美日韩精品| 美女免费视频一区| 欧美特黄一区| 亚洲一区中文| 99精品在线播放| 国产1区在线| 日韩久久99| 成片免费观看| 黄色片网站在线| 国产欧美日韩久久| 欧美xxxx中国| 欧美日韩国产91| 先锋男人资源站| 欧美日韩国产成人| 日韩欧美国产一二三区| 日韩在线观看一区| 日韩视频中文字幕| 日韩午夜中文字幕| 国产中文伊人| 欧美中日韩在线| 日韩在线视频精品| 国产欧美日韩中文字幕在线| 亚洲人线精品午夜| 久久精品久久久久| 国产三级视频在线播放线观看| 日韩中文字幕视频网| 欧美日韩在线观看一区| 亚洲高清免费一级二级三级| 日韩欧美中文字幕在线观看| 中文字幕五月天| 欧美中文字幕| 日韩欧美专区在线| 在线中文字幕网站| 欧美色欧美亚洲高清在线视频| 国产在线不卡一区| 高清日韩中文字幕| 欧美,日韩,国产在线| 欧美日韩亚洲综合在线| 亚洲成av人片| 欧美日韩在线视频免费观看 | 免费高清视频日韩| 婷婷精品进入| 午夜伦欧美伦电影理论片| 日韩精品在线观看视频| 午夜亚洲一区| 99久久婷婷| 国产乱国产乱老熟300| 精品色蜜蜜精品视频在线观看| 精品播放一区二区| 久久蜜桃一区二区| 成人精品视频一区| 精品成a人在线观看| 日韩a一区二区| 精品国产999| 欧美日韩国产高清视频| 中文字幕在线视频久| 亚洲高清视频在线| 亚洲 欧美 中文字幕| 中文官网资源新版中文第二页在线观看 | www.狠狠| 一区二区不卡在线播放| 不卡在线视频| 欧美日韩精品不卡| 中文字幕精品一区二| 亚洲3区在线| 人成免费在线视频| 日韩欧美在线1卡| 欧美日韩在线视频首页| 国产网站av| 黄色国产网站在线观看| 欧美成人二区| 亚洲免费精品| 92久久精品| 精品视频久久| 亚洲欧洲一区二区天堂久久| 久久久精品欧美| 久久精品一二三| 一级网站免费观看| 日韩欧美一级在线播放| 中文字幕日韩精品在线| 中文字幕国产欧美| 天堂在线中文资源| 欧美日韩国产第一页| 日韩欧美一级二级三级久久久| 欧美片网站免费| 国产偷国产偷亚洲清高网站| 国产黄在线看| 亚洲综合视频一区| 欧美日韩免费视频| 国产成人精品三级| 欧美日韩综合高清一区二区| 欧美不卡一区二区| 亚洲高清在线免费| 最近中文字幕在线中文视频| 国产成人精品999| 国产一区 二区 三区一级| 欧美 日韩 中文字幕| 日韩免费视频一区二区| 日韩三级一区| 日韩欧美中文免费| 欧美国产一区视频在线观看| 日韩精品在线观看网站| 日韩 欧美 中文| 亚洲最大黄色| 亚洲va中文字幕| 一级免费a一片| www.老鸭窝.com| 日韩不卡在线观看| 欧美日韩综合高清一区二区| 久久精品久久精品亚洲人| 国产123在线| 国产v日产∨综合v精品视频| 欧美日韩高清在线| 欧美人妻一区二区三区| 成人一区二区不卡免费| 91精品久久久久久久久| 国产视频二区| 欧美日韩夫妻久久| 国产视频三级在线观看播放| 午夜国产福利在线观看| 精品999视频| 日韩 国产 一区| 日韩欧美中文字幕视频| 亚洲综合在线小说| 97caopor国产在线视频| 日韩亚洲欧美中文字幕| 精品久久人人做人人爽| 亚洲高清在线免费| 亚洲中午字幕| 日韩欧美中文字幕在线视频| 免费在线播放av| 欧美日韩精品综合| 欧美人妻一区二区三区| 91精品婷婷国产综合久久| 亚洲永久免费视频| 日韩免费高清一区二区| 天堂在线视频中文网| 国产一级久久久| 国产激情久久久| 日韩国产在线不卡视频| 国产精久久久久| 天堂在线www天堂中文在线| av三级在线观看| 精品国产99| 不卡在线视频| 一区二区在线高清视频| 日韩午夜中文字幕| 国产丝袜在线播放| 国产日韩亚洲欧美| 日韩中文字幕在线一区| 久久精品电影| 日本a级黄色| 日韩高清不卡一区| 中文字幕亚洲欧美| 中文字幕一区二区三区精品| 欧美日韩午夜在线视频| 国产欧美日韩精品在线观看| 欧美 日韩 国产在线观看| 国产日韩免费| 日韩精品在线观看网站| 中文字幕日韩在线视频| 国产视频中文字幕在线观看| 亚洲а∨精品天堂在线| 日韩在线三区| 日韩在线a电影| 欧美三级在线视频| 精品国产乱码一区二区| 欧美日韩国产免费观看| 欧美日韩第一| 国产又粗又猛又爽又黄91精品| av一级在线| 欧美午夜精品在线| 国产99在线|亚洲| 精品人妻二区中文字幕| 久久精品久久精品亚洲人| 中文天堂在线一区| 91精品国产网站| 国产偷国产偷亚洲清高网站| 精品色蜜蜜精品视频在线观看| 国内不卡的二区三区中文字幕| 久久99久久久欧美国产| 欧美日韩国产片| 亚洲国产www| 午夜av一区二区| 日本亚洲视频在线| 日韩一级视频在线观看| 国产激情在线观看| 国产亚洲人成a一在线v站| 国产免费一级| 亚洲一区在线观看网站| 国产小视频在线观看| 日韩高清不卡一区二区| 在线国产99| 国产在线视频不卡| 中文字幕第一页在线播放| 日韩在线中文视频| 国产久卡久卡久卡久卡视频精品| 亚洲成年人在线播放| 日韩三级一区二区| 国产精品一区二三区| 亚洲v中文字幕| a视频在线播放| 国产日韩精品电影| 91久久久精品| 亚洲视频 中文字幕| 欧美久久久网站| 久久夜色精品国产欧美乱极品| 午夜国产在线视频| wwww亚洲| 视频一区二区国产| 欧美日韩国产一区中文午夜| 欧美99久久| 欧美日韩一级片在线观看| 日韩精品第一区| 欧美日韩亚洲91| 国产成人一区二区精品非洲| 91精品国产入口| av不卡免费看| 亚洲免费精品| 在线观看免费国产小视频| 91精品国产99| 国产在线精品日韩| 日韩欧美99| 日韩欧美中文字幕视频| 在线精品观看| 一区二区中文视频| 国产午夜精品视频| 日本国产一区| 在线免费91| 国产 欧美在线| 日韩一级免费视频| 日韩福利视频导航| 欧美国产日韩在线播放| 视频一区中文字幕国产| 在线观看精品国产| 欧美日韩在线不卡一区| www中文字幕| 欧美日韩一级片在线观看| 国产婷婷一区二区| 欧美亚洲视频在线看网址| 日韩视频中文字幕| 一区二区三区在线播| 国产欧美久久久久久久久| 日韩精品在线免费播放| 91精品国产色综合久久不卡蜜臀| 欧美日韩中文字幕视频| 二区中文字幕|