一个类似于QQ侧滑菜单的功能,支持从上、下、左、右四个方法打开菜单栏。可以通过自定义transform实现更加炫酷的动效!
先上效果图:
slide from left.gif
slide from right.gif
slide from top.gif
Github地址:https://github.com/yumi0629/SlideDrawer
使用方法:
SlideStack(
child: SlideContainer(
key: _slideKey,
child: Container(
/// widget mian.
),
slideDirection: SlideDirection.top,
onSlide: onSlide,
drawerSize: maxSlideDistance,
transform: transform,
),
drawer: Container(
/// widget drawer.
),
);
slideDirection
属性用来控制菜单从哪个方法打开;调用key.currentState.openOrClose()
方法可以手动打开或关闭菜单;配合transform属性和滑动过程中返回的监听值,可以在动画过程中为布局添加各种个样的变换。
实现分析
用Flutter实现这样的一个效果其实很简单,300行代码足矣。侧滑菜单的实现其实就是上层布局随着用户手势,更改自身的位置,从而让底层菜单栏展示出来。明白了这么一个过程之后,一切就都好办了。
基本思路:上下两层布局用Stack组合,上层布局需要支持手势,下层布局只需要是一个普通布局就可以了。所以难点就是,上层布局如何支持手势?关于Flutter中的手势可以看下这篇文章:解析Flutter中的手势控制Gestures,了解一下GestureRecognizer是什么。当然,我们实现简单的侧滑功能并不需要这么复杂,因为没有涉及到滑动冲突,我们只需使用系统自带的