Flutter卡片堆叠展示插件card_stack_widget的使用

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

Flutter卡片堆叠展示插件card_stack_widget的使用

📦 card_stack_widget

card_stack_widget是一个为Flutter应用提供垂直可滑动且高度可定制的卡片堆栈组件。通过这个插件,你可以创建一个具有交互性的卡片堆栈效果,使你的应用界面更加生动。

Usage 使用方法

CardStackWidget需要一个CardModel列表来创建卡片堆栈。你可以自定义卡片的滑动或移除方向,调整缩放比例或位置系数。此外,还可以设置拖动时改变透明度的效果。

以下是一个简单的例子,展示了如何使用CardStackWidgetCardModel

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Card Stack Widget Example'),
        ),
        body: CardStackExample(),
      ),
    );
  }
}

class CardStackExample extends StatelessWidget {
  List<CardModel> _buildMockList(BuildContext context, {int size = 4}) {
    final double containerWidth = MediaQuery.of(context).size.width - 16;

    var list = <CardModel>[];
    for (int i = 0; i < size; i++) {
      var color = Color((Random().nextDouble() * 0xFFFFFF).toInt()).withOpacity(1.0);

      list.add(
        CardModel(
          backgroundColor: color,
          radius: BorderRadius.circular(8),
          shadowColor: Colors.black.withOpacity(0.2),
          child: SizedBox(
            height: 310,
            width: containerWidth,
            child: Container(
              decoration: BoxDecoration(
                color: color,
                borderRadius: BorderRadius.circular(8),
              ),
              child: Center(
                child: Text(
                  'Card $i',
                  style: TextStyle(color: Colors.white, fontSize: 24),
                ),
              ),
            ),
          ),
        ),
      );
    }

    return list;
  }

  @override
  Widget build(BuildContext context) {
    final mockList = _buildMockList(context);

    return CardStackWidget(
      opacityChangeOnDrag: true,
      swipeOrientation: CardOrientation.both,
      cardDismissOrientation: CardOrientation.both,
      positionFactor: 3,
      scaleFactor: 1.5,
      alignment: Alignment.center,
      reverseOrder: true,
      animateCardScale: true,
      dismissedCardDuration: Duration(milliseconds: 150),
      cardList: mockList,
      onCardTap: (CardModel card) {
        // Handle tap event
        print('Card tapped');
      },
    );
  }
}

参数说明

CardStackWidget 支持的属性

  • cardList: 卡片模型列表。
  • scaleFactor: 缩放比例。
  • positionFactor: 位置系数。
  • alignment: 对齐方式(默认居中)。
  • reverseOrder: 是否反转顺序。
  • cardDismissOrientation: 卡片移除的方向。
  • swipeOrientation: 滑动方向。
  • onCardTap: 卡片点击事件回调。
  • animateCardScale: 动画缩放持续时间。
  • dismissedCardDuration: 卡片被移除后的动画持续时间。
  • opacityChangeOnDrag: 拖动时是否改变透明度。

CardModel 支持的属性

  • key: 唯一标识符。
  • shadowColor: 阴影颜色。
  • backgroundColor: 背景颜色。
  • radius: 圆角半径。
  • border: 边框样式。
  • child: 子组件。
  • padding: 内边距。
  • margin: 外边距。
  • gradient: 渐变色。
  • imageDecoration: 图像装饰。

通过这些参数,你可以根据自己的需求定制出独特的卡片堆栈效果。希望这个示例对你有所帮助!

Preview 效果预览

GIF example card widget 1 GIF example card widget 2

以上是关于card_stack_widget的基本介绍和使用示例,如果有任何问题或者需要更深入的帮助,请随时提问!


更多关于Flutter卡片堆叠展示插件card_stack_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter卡片堆叠展示插件card_stack_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 card_stack_widget 插件在 Flutter 中实现卡片堆叠展示的示例代码。这个插件允许你以堆叠的方式展示卡片,并且可以很方便地添加动画效果。

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

dependencies:
  flutter:
    sdk: flutter
  card_stack_widget: ^x.y.z  # 替换为最新版本号

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

接下来是一个完整的示例代码,展示如何使用 card_stack_widget 来实现卡片堆叠展示:

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

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

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

class CardStackScreen extends StatefulWidget {
  @override
  _CardStackScreenState createState() => _CardStackScreenState();
}

class _CardStackScreenState extends State<CardStackScreen> {
  final List<String> cardData = [
    'Card 1',
    'Card 2',
    'Card 3',
    'Card 4',
    'Card 5',
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Card Stack Widget Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: CardStackWidget(
          alignment: Alignment.center,
          onSwipeLeft: () {
            print('Card swiped left');
          },
          onSwipeRight: () {
            print('Card swiped right');
          },
          onCardThrown: (index) {
            print('Card $index thrown');
          },
          stackCards: cardData.map<Widget>((String data) {
            return Card(
              elevation: 4.0,
              child: Container(
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.circular(10.0),
                ),
                child: Center(
                  child: Text(
                    data,
                    style: TextStyle(fontSize: 24.0),
                  ),
                ),
              ),
            );
          }).toList(),
        ),
      ),
    );
  }
}

解释

  1. 依赖导入:确保在 pubspec.yaml 中添加了 card_stack_widget 依赖。
  2. 创建主应用MyApp 类是应用的入口,设置了应用的主题和主页。
  3. 创建主页面CardStackScreen 是一个有状态的组件,包含卡片数据列表。
  4. 卡片堆叠组件CardStackWidget 用于展示卡片堆叠。
    • alignment:卡片堆叠的对齐方式。
    • onSwipeLeftonSwipeRight:左滑和右滑时的回调。
    • onCardThrown:卡片被抛出时的回调。
    • stackCards:卡片列表,每个卡片是一个 Card 组件,包含文本数据。

这个示例展示了如何创建一个简单的卡片堆叠展示,并处理滑动和抛出事件。你可以根据需要进一步自定义卡片样式和动画效果。

回到顶部