我想创建一个卡滚动水平与捕捉到适合的效果时,无论是从左或右滑动列表。
每张卡之间都有一定的间距,适合屏幕,类似于下图
除此之外,这些水平滚动列表元素应该包含在垂直滚动列表中。
我所有我能够实现的是只显示一个水平滚动卡列表后,在Flutter文档的例子。
class SnapCarousel extends StatelessWidget {
@override
Widget build(BuildContext context) {
final title = 'Horizontal List';
return MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Container(
margin: EdgeInsets.symmetric(vertical: 20.0),
height: 200.0,
child: ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
Container(
width: 160.0,
color: Colors.red,
),
Container(
width: 160.0,
color: Colors.blue,
),
Container(
width: 160.0,
color: Colors.green,
),
Container(
width: 160.0,
color: Colors.yellow,
),
Container(
width: 160.0,
color: Colors.orange,
),
],
),
),
),
);
}
}
6条答案
按热度按时间r8xiu3jd1#
使用
PageView
和ListView
:au9on6nz2#
截图:
如果您不想使用任何第三方软件包,您可以简单地尝试以下操作:
cgh8pdjw3#
这是一个老问题,我来这里是为了寻找别的东西;- ),但WitVault所期待的是很容易做这个包:https://pub.dev/packages/flutter_swiper
执行情况:
将依赖项放入pubsec.yaml中:
将其导入到需要它的页面中:
在布局中:
bxjv4tth4#
要通过ListView实现捕捉效果,只需将物理设置为PageScrollPhysics
knsnq2tg5#
高级快照列表
如果您正在寻找高级用途,例如动态项目大小、可配置的捕捉点、项目的可视化和基本控制(例如scrollToIndex、animate),则应该使用具有更多功能的基于本机的SnappyListView。
qq24tv8q6#
对于不想使用第三方库的用户,我认为solution from CopsOnRoad的答案更好、更简单。但是,由于没有动画,因此我在查看卡片时添加了缩放动画(展开)且上一张卡已刷卡(收缩)使用索引。所以发生的情况是,每当第一次加载页面时,第一张和第二张卡不会有任何动画,而当刷卡时,只有前一张和当前的卡片有缩放动画。这是我的实现:
我用TweenAnimationBuilder制作了这个动画,并对小部件进行了硬编码,你可以在需要的时候为你的小部件使用方法,或者使用flutter_animate包来制作动画。