Flutter列表Item侧滑菜单组件, flutter_slidable_list_view github,pub的优化重构版
部分实现借鉴了Provider,由于之前那个sliable_list_view写的太💩了还加了个flutter的头,现在是在看不下去了,所以重新在这个项目里 重构 (重写),有什么问题欢迎issues指出,本🥬🐔有空一定及时处理(flag.png)
目前仅支持向左滑动,每个Item的菜单Action数量、Widget可以自由定制,相比于之前的flutter_slidable_list_view,不再与ListView绑定,同时优化了性能,之前滑动一个整个列表所有元素重建,现在仅会重建极小的一部分,目前刷新范围已经控制到最小,后续如有优化空间会继续优化
在原有ListView的基础上,外层使用SlideConfiguration
包裹侧滑菜单的相关配置信息,然后将
原有item使用SlideItem
进行包裹即可,使用方法请参考示例程序的代码,涉及到的类的参数含义将在下面解释
SlideConfiguration
参数 |
含义 |
类型 |
child |
子Widget |
Widget |
config |
SlideConfig类型的配置Bean |
SldieConfig |
SlideConfig
参数 |
含义 |
类型 |
默认值 |
supportElasticity |
是否支持弹性滑动(即滑动打开菜单时是否可以超过设定值然后反弹) |
Bool |
True |
closeOpenedItemOnTouch |
已经打开的Item在触摸其左侧的内容区域的时候是否直接关闭菜单 |
Bool |
fal |
slideProportion |
每个菜单Item的宽度所占的比例(相对于整个ListItem的宽度) |
double |
0.25 |
elasticityProportion |
弹性滑动的额外可越界值 |
dou b le |
0.1 |
actionOpenThreshold |
打开菜单所需要的最低的侧滑比例 |
double |
0.5 |
backgroundColor |
Item的背景颜色(因为使用Stack实现的菜单Item,所以如果列表元素透明会导致重叠),不可为Colors.transparent |
Color |
Colors.white |
slideOpenAnimDuration |
打开侧边菜单的动画持续时间,这里的时间时从0到完全打开的总时间,实际手指抬起后的动画时间会根据已运动比例来获取实际所需时间 |
Duration |
200ms |
slideCloseAnimDuration |
关闭侧边菜单动画的持续时间(规则同上) |
Duration |
200ms |
deleteStep1AnimDuration |
删除动画第一阶段(删除按钮Widget大小扩展为整个列表Item大小)持续时间 |
Duration |
200ms |
deleteStep2AnimDuration |
删除动画第二阶段(Item的高度变化)持续时间 |
Duration |
200ms |
|
|
|
|
SlideItem
参数 |
含义 |
类型 |
默认值 |
indexInList |
当前Item在列表中的位置 |
int |
null |
actions |
菜单Item的元素列表 |
List |
null |
child |
child |
Widget |
null |
slidable |
是否可以滑动 |
bool |
true |
SlideAction
参数 |
含义 |
类型 |
默认值 |
isDeleteButton |
是否是删除按钮,用于标记删除Widget执行动画 |
bool |
false |
actionWidget |
侧边菜单的Item的Widget |
Widget |
null |
tapCallback |
Action被点击时的回调,会提供Slide对象可用于执行关闭、删除等操作的动画 |
ActionTapCallaack |
Null |
Slide
方法/成员 |
含义 |
参数 |
返回值 |
close |
关闭侧滑菜单 |
🈚️ |
void |
delete |
执行删除动画 |
可选参数,useAnim,默认值true, |
Future,返回动画执行的future |
indexInList |
item在列表中中的位置 |
无 |
int |