Flutter卡片翻转与滑动插件flip_card_swiper的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter卡片翻转与滑动插件 flip_card_swiper 的使用

简介

flip_card_swiper 是一个可定制的、支持平滑翻转动画和触觉反馈的卡片组件,适用于Flutter应用。它提供了丰富的功能,包括翻转和滑动动画、卡组动画、动态更新等。

特性

  • 翻转与滑动动画:通过垂直拖动手势轻松在卡片之间切换。
  • 卡组动画:自动将卡片动画化为集合,非常适合引导序列或展示。
  • 触觉反馈:提供用户翻转卡片时的触觉反馈,增强用户体验。
  • 动态卡片更新:在动画中途更新卡片顺序,实现无限循环浏览卡片集。
  • 自定义缩放和偏移:微调卡片位置、缩放比例和过渡效果,以实现独特的翻转和堆叠效果。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flip_card_swiper: ^1.0.0

然后运行:

flutter pub get

使用示例

下面是一个完整的示例代码,展示了如何使用 flip_card_swiper 插件来创建一个带有翻转和滑动功能的卡片组件。

示例代码

import 'package:flutter/material.dart';
import 'package:flip_card_swiper/flip_card_swiper.dart';

void main() => runApp(const MyApp());

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _shouldPlayAnimation = false;
  final List<Map<String, dynamic>> cards = [
    {'color': Colors.blue, 'text': 'Card 1'},
    {'color': Colors.red, 'text': 'Card 2'},
    {'color': Colors.green, 'text': 'Card 3'},
    {'color': Colors.purple, 'text': 'Card 4'},
    {'color': Colors.orange, 'text': 'Card 5'},
    {'color': Colors.teal, 'text': 'Card 6'},
    {'color': Colors.pink, 'text': 'Card 7'},
    {'color': Colors.amber, 'text': 'Card 8'},
    {'color': Colors.indigo, 'text': 'Card 9'},
    {'color': Colors.brown, 'text': 'Card 10'},
  ];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Card Stack Animation',
      home: Scaffold(
        backgroundColor: const Color(0xFFEEEEEE),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            setState(() {
              _shouldPlayAnimation = !_shouldPlayAnimation;
            });
          },
          child: Icon(_shouldPlayAnimation ? Icons.pause : Icons.play_arrow),
        ),
        body: Center(
          child: FlipCardSwiper(
            onCardCollectionAnimationComplete: (value) {
              setState(() {
                _shouldPlayAnimation = value;
              });
            },
            shouldStartCardCollectionAnimation: _shouldPlayAnimation,
            cardData: cards,
            animationDuration: const Duration(milliseconds: 600),
            downDragDuration: const Duration(milliseconds: 200),
            onCardChange: (index) {},
            cardBuilder: (context, index, visibleIndex) {
              if (index < 0 || index >= cards.length) {
                return const SizedBox.shrink();
              }
              final card = cards[index];
              return AnimatedSwitcher(
                duration: const Duration(milliseconds: 300),
                transitionBuilder: (Widget child, Animation<double> animation) {
                  final bool isIncoming =
                      child.key == ValueKey<int>(visibleIndex);

                  if (isIncoming) {
                    return FadeTransition(
                      opacity: animation,
                      child: child,
                    );
                  } else {
                    return child;
                  }
                },
                child: Container(
                  key: ValueKey<int>(visibleIndex),
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(10),
                    color: card['color'] as Color,
                    boxShadow: [
                      BoxShadow(
                        color: Colors.black.withOpacity(0.1),
                        blurRadius: 40,
                      )
                    ],
                  ),
                  width: 300,
                  height: 200,
                  alignment: Alignment.center,
                  child: Text(
                    card['text'] as String,
                    style: const TextStyle(color: Colors.black45, fontSize: 12),
                  ),
                ),
              );
            },
          ),
        ),
      ),
    );
  }
}

许可证

该插件使用 MIT 许可证发布,具体内容如下:

MIT License

Copyright (c) 2024 Abhay Maurya

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

报告问题或请求功能

  • 如果发现任何问题,请提交问题
  • 对于功能请求或改进建议,请提交功能请求
  • 欢迎贡献PR,帮助改进此工具!

更多关于Flutter卡片翻转与滑动插件flip_card_swiper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter卡片翻转与滑动插件flip_card_swiper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,flip_card_swiper 是一个结合了卡片翻转与滑动功能的 Flutter 插件。以下是如何在 Flutter 项目中使用 flip_card_swiper 的示例代码。

首先,确保你已经在 pubspec.yaml 文件中添加了 flip_card_swiper 依赖:

dependencies:
  flutter:
    sdk: flutter
  flip_card_swiper: ^latest_version  # 请将 latest_version 替换为最新的版本号

然后运行 flutter pub get 来安装依赖。

接下来是一个简单的示例代码,展示如何使用 FlipCardSwiper 来实现卡片翻转与滑动功能:

import 'package:flutter/material.dart';
import 'package:flip_card_swiper/flip_card_swiper.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flip Card Swiper Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FlipCardSwiperDemo(),
    );
  }
}

class FlipCardSwiperDemo extends StatefulWidget {
  @override
  _FlipCardSwiperDemoState createState() => _FlipCardSwiperDemoState();
}

class _FlipCardSwiperDemoState extends State<FlipCardSwiperDemo> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flip Card Swiper Demo'),
      ),
      body: Center(
        child: FlipCardSwiper(
          // 设置卡片数量
          itemCount: 5,
          // 设置卡片的宽度和高度
          cardWidth: 300,
          cardHeight: 400,
          // 设置翻转动画的时长
          flipDuration: Duration(milliseconds: 500),
          // 设置卡片正面内容构建器
          frontBuilder: (context, index) {
            return Card(
              color: Colors.blue,
              child: Center(
                child: Text(
                  'Front $index',
                  style: TextStyle(color: Colors.white),
                ),
              ),
            );
          },
          // 设置卡片背面内容构建器
          backBuilder: (context, index) {
            return Card(
              color: Colors.red,
              child: Center(
                child: Text(
                  'Back $index',
                  style: TextStyle(color: Colors.white),
                ),
              ),
            );
          },
          // 设置卡片点击事件回调
          onCardClick: (index) {
            print('Card $index clicked');
          },
          // 设置卡片翻转事件回调
          onCardFlip: (index) {
            print('Card $index flipped');
          },
        ),
      ),
    );
  }
}

在这个示例中:

  1. FlipCardSwiper 是主要的组件,用于创建翻转和滑动的卡片视图。
  2. itemCount 属性指定卡片的数量。
  3. cardWidthcardHeight 属性设置卡片的宽度和高度。
  4. flipDuration 属性设置卡片翻转动画的时长。
  5. frontBuilderbackBuilder 是两个重要的构建器函数,分别用于构建卡片的正面和背面内容。
  6. onCardClickonCardFlip 是两个回调函数,分别用于处理卡片点击和翻转事件。

运行这段代码后,你应该会看到一个包含 5 张卡片的视图,每张卡片都可以点击翻转,并且可以在水平方向上滑动切换卡片。

回到顶部