微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Flutter 中的垂直轮播中刷卡

如何解决在 Flutter 中的垂直轮播中刷卡

我正在尝试创建一个社交媒体提要,其中每个帖子都是一张不同大小的卡片,一张叠一张(几乎像一个垂直的旋转木马)。对于每张卡片,用户可以向右滑动喜欢,向左滑动不喜欢,向上滑动跳过。当用户向左或向右滑动时,底部的卡片必须出现在屏幕中央,占据其位置(将其视为 Tinder 和 Tiktok 的混合体)。

Here's an animation showing exactly what I need

我仍在学习 Flutter,不知道使用什么小部件来实现这一目标。关于如何使这项工作有任何想法?

解决方法

Dismissible 小部件应该是您所需要的

void main() {
  runApp(Screen());
}

class Screen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Screen1(),),);
  }
}

编辑:

class Screen1 extends StatefulWidget {
  @override
  _Screen1State createState() => _Screen1State();
}
class _Screen1State extends State<Screen1> {
  final List<Color> colors = [Colors.red,Colors.blue,Colors.yellow,Colors.green];

  @override
  Widget build(BuildContext context) {
    return PageView.builder(
        controller: PageController(viewportFraction: 0.8),scrollDirection: Axis.vertical,itemCount: colors.length,itemBuilder: (context,index) {
          return Padding(
            padding: const EdgeInsets.all(20),child: AnimatedSwitcher(
              transitionBuilder: (child,animation) {
                return SlideTransition(
                    child: child,position:
                        Tween<Offset>(begin: Offset(0,1),end: Offset(0,0)).animate(animation));
              },duration: Duration(milliseconds: 200),child: Dismissible(
                movementDuration: Duration(milliseconds: 1),resizeDuration: Duration(milliseconds: 1),onDismissed: (direction) {
                  setState(() {
                    colors.remove(colors[index]);
                  });
                },key: ValueKey(colors[index]),child: Container(
                  width: (200+index*75).toDouble(),color: colors[index],);
        });
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。