开始
想做个有意思的底部导航栏,不想用官方的,找了一些参考,发现这个比较有意思,还有动画。
遗憾的但是拿过来这个并不能直接用
思路
在布局上来看 底部导航栏是一个横向的布局 我们用 Row 就可以了,每Bar切换是与页面绑定的,而且Bar的个数
是不固定的,并且每个Bar都要与对应的页面相绑定。
新建一个 Bar的类存储每个导航栏的信息
1  | dart复制代码class TabItem {  | 
当然你还可以扩充 比如设置这个加个颜色什么之类的 。
简单的底部导航栏
效果
通过传入的导航,根据导航数量进行构建底部导航栏,barItems里添加每个导航的样式。
1  | dart复制代码  | 
把导航栏这个放入Row 横向布局里即可
1  | dart复制代码class EasyBar extends StatefulWidget {  | 
把点击事件暴露出来处理,最主要的是页面的index 要与导航的index所绑定
1  | dart复制代码int selectedBarIndex = 1;  | 
动画的底部导航栏
效果
通过传入的导航的数量构建底部导航栏还是大同小异,唯一的区别是,当选中的时候 icon变透明,以及title从底部移动上来的两个动画效果 使用了 AnimatedOpacity 控制透明度 AnimatedAlign 来控制标题的位置
1  | less复制代码List<Widget> _buildBarItems() {  | 
这个圆我们观察他!
大圆叠小圆 上面还有个icon
叠叠圆
1  | dart复制代码Positioned(  | 
要想在stack中子组件超出父组件的约束 只需要stack的 clipBehavior属性设置 Clip.none
完整代码
1  | dart复制代码import 'package:flutter/material.dart';  | 
ENDING 动画真好玩~
本文转载自: 掘金