flutter實(shí)現(xiàn)底部不規(guī)則導(dǎo)航欄
本文實(shí)例為大家分享了flutter實(shí)現(xiàn)底部不規(guī)則導(dǎo)航欄的具體代碼,供大家參考,具體內(nèi)容如下
scafford的bottomNavigationBar參數(shù)賦值BottomAppBar可以實(shí)現(xiàn),BottomAppBar比BottomNavigationBar靈活,在body參數(shù)之外準(zhǔn)備好一個(gè)fab,使用BottomAppBar的shape屬性設(shè)置BottomAppBar為一個(gè)挖了圓形的矩形,設(shè)置fab的位置便可;
main:
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_app/EachView.dart'; import 'package:flutter_app/NewPage.dart'; void main(){ ? runApp(MyApp()); } class MyApp extends StatelessWidget{ ? @override ? Widget build(BuildContext context) { ? ? // TODO: implement build ? ? // throw UnimplementedError(); ? ? return new MaterialApp( ? ? ? theme: ThemeData( ? ? ? ? primarySwatch:Colors.lightBlue//fab的顏色 ? ? ? ), ? ? ? home: MyNavigationBar(), ? ? ); ? } } class ?MyNavigationBar extends StatefulWidget{ ? @override ? MyNavigationBarState createState() { ? ? // TODO: implement createState ? ? // throw UnimplementedError(); ? ? return new MyNavigationBarState(); ? } } class MyNavigationBarState extends State<MyNavigationBar>{ ? List<Widget> _list; ? int _index=0; ? @override ? void initState() { ? ? _list=[]; ? ? _list..add(EachView(title: "0",))..add(EachView(title: "1",)); ? } ? @override ? Widget build(BuildContext context) { ? ? // TODO: implement build ? ? // throw UnimplementedError(); ? ? return new Scaffold( ? ? ? floatingActionButton: FloatingActionButton(//注意:如果想要fab放在默認(rèn)的位置,是放在scafford的floatingactionbar參數(shù)的,而不是放在body ? ? ? ? onPressed: (){ ? ? ? ? ? Navigator.push(context, MaterialPageRoute(builder: (BuildContext context){ ? ? ? ? ? ? return new NewPage(); ? ? ? ? ? })); ? ? ? ? }, ? ? ? ? child: Icon(Icons.add,color: Colors.white,), ? ? ? ), ? ? ? floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,//設(shè)置fab的位置 ? ? ? body: _list[_index], ? ? ? bottomNavigationBar: BottomAppBar( ? ? ? ? color: Colors.amber, ? ? ? ? shape: CircularNotchedRectangle(),//讓bottomAppBar是一個(gè)挖了圓形的矩形 ? ? ? ? child: Row( ? ? ? ? ? mainAxisAlignment: MainAxisAlignment.spaceAround,//首尾的寬度等于中間寬度的一半 ? ? ? ? ? mainAxisSize: MainAxisSize.max,//表示占滿整個(gè)寬度,如果是min表示包裹子控件 ? ? ? ? ? children: [ ? ? ? ? ? ? IconButton( ? ? ? ? ? ? ? icon: Icon(Icons.home,color: Colors.lightBlue,), ? ? ? ? ? ? ? onPressed: (){ ? ? ? ? ? ? ? ? setState(() { ? ? ? ? ? ? ? ? ? _index=0; ? ? ? ? ? ? ? ? }); ? ? ? ? ? ? ? }, ? ? ? ? ? ? ), ? ? ? ? ? ? IconButton( ? ? ? ? ? ? ? icon: Icon(Icons.photo,color: Colors.lightBlue,), ? ? ? ? ? ? ? onPressed: (){ ? ? ? ? ? ? ? ? setState(() { ? ? ? ? ? ? ? ? ? _index=1; ? ? ? ? ? ? ? ? }); ? ? ? ? ? ? ? }, ? ? ? ? ? ? ), ? ? ? ? ? ], ? ? ? ? ), ? ? ? ), ? ? ); ? } }
EachView:
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class EachView extends StatelessWidget{ ? final String title; ? const EachView({Key key, this.title}) : super(key: key); ? @override ? Widget build(BuildContext context) { ? ? // TODO: implement build ? ? // throw UnimplementedError(); ? ? return new Scaffold( ? ? ? body: Center( ? ? ? ? child: Text("$title"), ? ? ? ), ? ? ); ? } }
NewPage:
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class NewPage extends StatelessWidget{ ? @override ? Widget build(BuildContext context) { ? ? // TODO: implement build ? ? // throw UnimplementedError(); ? ? return new Scaffold( ? ? ? body: Center( ? ? ? ? child: Text("NewPage"), ? ? ? ), ? ? ); ? } }
效果:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android ListView里控件添加監(jiān)聽方法的實(shí)例詳解
這篇文章主要介紹了Android ListView里控件添加監(jiān)聽方法的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08android圖庫播放幻燈片時(shí)按power鍵滅屏再亮屏顯示keyguard
圖庫在播放幻燈片時(shí),按power鍵滅屏,然后再亮屏,會發(fā)現(xiàn)幻燈片繼續(xù)在播放,沒有顯示keyguard,如何在亮屏后顯示解鎖界面,具體實(shí)現(xiàn)方法如下,感興趣的朋友可以參考下哈2013-06-06舉例講解Android應(yīng)用開發(fā)中OTTO框架的基本使用
這篇文章主要介紹了Android應(yīng)用開發(fā)中OTTO框架的基本使用講解,文中舉了創(chuàng)建一個(gè)單例模式的應(yīng)用例子,需要的朋友可以參考下2016-02-02Android編程實(shí)現(xiàn)在Activity中操作刷新另外一個(gè)Activity數(shù)據(jù)列表的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)在Activity中操作刷新另外一個(gè)Activity數(shù)據(jù)列表的方法,結(jié)合具體實(shí)例形式分析了2種常用的Activity交互實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06Android利用SpannableString實(shí)現(xiàn)格式化微博內(nèi)容
這篇文章主要介紹了Android利用SpannableString實(shí)現(xiàn)格式化微博內(nèi)容的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考借鑒價(jià)值,需要的朋友們下面來一起看看吧。2017-03-03Android 關(guān)于“NetworkOnMainThreadException”問題的原因分析及解決辦法
這篇文章主要介紹了Android 關(guān)于“NetworkOnMainThreadException”的相關(guān)知識,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-02-02