博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flutter 底部bottomNavigationBar凸起效果
阅读量:5273 次
发布时间:2019-06-14

本文共 4082 字,大约阅读时间需要 13 分钟。

概要

     最近在做flutter 的时候,之前看到想实现 底部导航栏中间按钮 凸起效果, 最近想做又突然找不到方案了,因此记录下这里的实现方式。

预览效果

 

代码

主要使用 BottomAppBar 组建,以及配合FloatingActionButton ,具体全部代码如下:

import 'package:flutter/material.dart';import 'package:flutter_app/src/pages/KBRandomWords.dart';import "package:flutter_app/src/pages/KBWidgetPage.dart";import 'kb_movie_review.dart';import 'KBLoginPage.dart';import 'src/widgets/cookbook/SnackBarDemo.dart';class KBHome2 extends StatefulWidget {  @override  State
createState() { return _KBHomeState2(); }}class _KBHomeState2 extends State
{ int _currentIndex = 0; List
_pages; @override void initState() { super.initState(); print("Home InitStatus"); _pages = [ new RandomWords( key: Key("random"), ), new KBMovieReview(key: Key("movie")), new KBLoginPage(), new KBWidgetPage( key: Key("widget"), ), ]; } @override void dispose() { super.dispose(); _pageController.dispose(); } var _pageController = PageController(initialPage: 0); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("测试抽屉"), ), // body: _pages[_currentIndex], // 只是这样写会导致在每次切换的时候 都rebuild 子控件 body: PageView.builder( controller: _pageController, onPageChanged: _pageChanged, itemCount: _pages.length, itemBuilder: (context, index) => _pages[index]), floatingActionButton: FloatingActionButton( onPressed: () {}, child: Icon( Icons.add, color: Colors.white, ), ), floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, bottomNavigationBar: BottomAppBar( color: Colors.red, shape: CircularNotchedRectangle(), child: Padding( padding: EdgeInsets.fromLTRB(0, 6, 0, 6), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceAround, children:
[ GestureDetector( onTap: () { onTap(0); }, child: Column( mainAxisSize: MainAxisSize.min, children:
[ Icon(Icons.home, color: getColor(0)), Text("首页", style: TextStyle(color: getColor(0))) ], )), GestureDetector( onTap: () { onTap(1); }, child: Column( mainAxisSize: MainAxisSize.min, children:
[ Icon(Icons.forum, color: getColor(1)), Text("论坛", style: TextStyle(color: getColor(1))) ], )), Column( mainAxisSize: MainAxisSize.min, children:
[ Icon( Icons.home, color: Colors.transparent, ), Text("发布", style: TextStyle(color: Color(0xFFEEEEEE))) ], ), GestureDetector( onTap: () { onTap(2); }, child: Column( mainAxisSize: MainAxisSize.min, children:
[ Icon(Icons.mail, color: getColor(2)), Text("消息", style: TextStyle(color: getColor(2))) ], )), GestureDetector( onTap: () { onTap(3); }, child: Column( mainAxisSize: MainAxisSize.min, children:
[ Icon(Icons.person, color: getColor(3)), Text("我的", style: TextStyle(color: getColor(3))) ], )) ], ), ), ), ); } Color getColor(int value) { return this._currentIndex == value ? Theme.of(context).cardColor : Color(0XFFBBBBBB); } void _pageChanged(int index) { setState(() { if (_currentIndex != index) _currentIndex = index; }); } void onTap(int index) {// _pageController.jumpToPage(index); _pageController.animateToPage(index, duration: const Duration(milliseconds: 100), curve: Curves.easeOutSine); }}

上面的pages 只要替换成自己的即可,

这里主要使用到了 以下代码实现:

floatingActionButton: FloatingActionButton(        onPressed: () {},        child: Icon(          Icons.add,          color: Colors.white,        ),      ),      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,

 

转载于:https://www.cnblogs.com/kingbo/p/11431928.html

你可能感兴趣的文章
《TCP/IP 详解 卷一》读书笔记 -----第四章 ARP
查看>>
C# Stream 和 byte[] 之间的转换
查看>>
Cracking the code interview
查看>>
OMG: daily scrum nine
查看>>
redis与spring结合错误情况
查看>>
Vue.js的从入门到放弃进击录(二)
查看>>
第六章 字节码执行方式--解释执行和JIT
查看>>
Mesh属性[Unity]
查看>>
ajax与java后台交互
查看>>
面向对象之元类
查看>>
MySQL常用函数
查看>>
实现绘制图形的ToolBar
查看>>
C# 串口接收数据中serialPort.close()死锁
查看>>
Python3控制结构与函数
查看>>
字符串方法title()、istitle()
查看>>
yield语句
查看>>
java序列化问题
查看>>
Html.Partial和Html. RenderPartial用法
查看>>
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>