开始
想做个有意思的底部导航栏,不想用官方的,找了一些参考,发现这个比较有意思,还有动画。
遗憾的但是拿过来这个并不能直接用
思路
在布局上来看 底部导航栏是一个横向的布局 我们用 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 动画真好玩~
本文转载自: 掘金