Flutter动态堆叠卡片轮播插件dynamic_stack_card_swiper的使用

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

Flutter动态堆叠卡片轮播插件 dynamic_stack_card_swiper 的使用

简介

dynamic_stack_card_swiper 是一个基于 appinio_swiper 的Flutter包,用于实现类似Tinder的卡片滑动效果。它支持在任何方向上滑动自定义小部件(无状态或有状态),并且具有非常平滑的动画效果,适用于Android、iOS和WebApp。与原版相比,此插件允许用户在已有的卡片堆栈中动态添加新的卡片。

为什么选择这个插件?

作者开发此插件的原因是他希望能够在一个已经存在卡片堆栈的情况下,仍然能够添加新的卡片到顶部,即使用户已经划过了几张卡片或者整个堆栈已经被清空。为了实现这一点,不得不移除一些原始插件的功能(如unswipe功能),但这些功能可以通过外部代码重新实现。

如何使用?

在堆栈顶部添加项目

你可以使用DynamicStackCardSwiperController<MyModel>.addCardOnTop(modelItem, direction)方法来在现有堆栈的顶部添加新项目。这里的direction参数是一个AxisDirection枚举值,允许你指定新卡片从屏幕的哪个方向加入堆栈。

访问控制器中的当前堆栈 (>= 1.2.0)

现在可以从控制器中访问当前堆栈,以便于插入新项或其他操作。

阻止特定项目向某些方向滑动 (>= 1.3.0)

可以为特定项目设置禁止滑动的方向。如果用户尝试向这些禁用的方向滑动,则会触发onSwipeUnauthorized回调函数。此外,DynamicStackCardSwiperController的滑动方法包含了一个force标志位,用来忽略或遵循这一限制条件。

安装指南

首先创建一个新的Flutter项目:

flutter create MyApp

然后,在你的pubspec.yaml文件中添加依赖:

dependencies:
  dynamic_stack_card_swiper: ^最新版本号

或者直接运行以下命令安装:

flutter pub add dynamic_stack_card_swiper

接下来,在你的库文件中导入该插件:

import 'package:dynamic_stack_card_swiper/dynamic_stack_card_swiper.dart';

使用示例

下面是一个简单的示例,展示了如何将DynamicStackCardSwiper放入Scaffold或CupertinoPageScaffold中,并定义可选参数以启用不同的特性。

import 'package:flutter/cupertino.dart';
import 'package:dynamic_stack_card_swiper/dynamic_stack_card_swiper.dart';

class Example extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      child: SizedBox(
        height: MediaQuery.of(context).size.height * 0.75,
        child: DynamicStackCardSwiper<String>(
          cardsBuilder: (BuildContext context, String item) {
            return Container(
              alignment: Alignment.center,
              child: Text(item),
              color: CupertinoColors.activeBlue,
            );
          },
        ),
      ),
    );
  }
}

控制器方法

控制器提供了多种方法来控制卡片的行为,例如触发默认方向的滑动、左滑、右滑、上滑、下滑、在顶部添加卡片以及根据给定偏移量进行动画等。

完整示例Demo

这里提供了一个更完整的示例,包括了如何使用控制器来管理卡片的添加与滑动行为:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Dynamic Stack Card Swiper Demo')),
        body: Example(),
      ),
    );
  }
}

class Example extends StatefulWidget {
  [@override](/user/override)
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  final DynamicStackCardSwiperController<String> controller =
      DynamicStackCardSwiperController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Expanded(
          child: DynamicStackCardSwiper<String>(
            controller: controller,
            cardsBuilder: (context, item) {
              return Center(child: Text(item));
            },
            items: ['Card 1', 'Card 2', 'Card 3'],
          ),
        ),
        ElevatedButton(
          onPressed: () => controller.addCardOnTop('New Card', AxisDirection.up),
          child: Text('Add New Card on Top'),
        ),
      ],
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用dynamic_stack_card_swiper插件的一个基本示例代码。这个插件允许你创建动态堆叠卡片轮播效果。首先,你需要确保在你的pubspec.yaml文件中添加了该插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  dynamic_stack_card_swiper: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,在你的Flutter项目中,你可以使用以下代码来创建动态堆叠卡片轮播效果:

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Map<String, dynamic>> cardData = [
    {"image": "assets/image1.jpg", "title": "Card 1"},
    {"image": "assets/image2.jpg", "title": "Card 2"},
    {"image": "assets/image3.jpg", "title": "Card 3"},
    // 添加更多卡片数据
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Dynamic Stack Card Swiper"),
      ),
      body: DynamicStackCardSwiper(
        cardDataList: cardData,
        onCardClicked: (index) {
          // 点击卡片时的回调
          print("Card $index clicked");
        },
        cardWidth: 300,
        cardHeight: 400,
        stackCount: 3, // 堆叠数量
        animationDuration: Duration(milliseconds: 500), // 动画持续时间
        overlayColor: Colors.black.withOpacity(0.3), // 覆盖层颜色
        cardBuilder: (context, data, index) {
          return Stack(
            alignment: Alignment.center,
            children: [
              Image.asset(
                data["image"],
                fit: BoxFit.cover,
                width: double.infinity,
                height: double.infinity,
              ),
              Positioned(
                bottom: 10,
                left: 0,
                right: 0,
                child: Text(
                  data["title"],
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 24,
                    fontWeight: FontWeight.bold,
                  ),
                  textAlign: TextAlign.center,
                ),
              ),
            ],
          );
        },
      ),
    );
  }
}

在这个示例中:

  1. 我们首先导入了dynamic_stack_card_swiper插件。
  2. 创建了一个包含卡片数据的列表cardData,每个卡片数据包含一个图片路径和标题。
  3. _MyHomePageState中,我们使用了DynamicStackCardSwiper组件,并传递了卡片数据列表、卡片点击回调、卡片宽度、卡片高度、堆叠数量、动画持续时间和覆盖层颜色等参数。
  4. 使用cardBuilder函数来构建每个卡片的UI,这里我们简单地使用了Stack来组合图片和标题。

请确保你有适当的图片资源放在assets文件夹中,并在pubspec.yaml中声明它们:

flutter:
  assets:
    - assets/image1.jpg
    - assets/image2.jpg
    - assets/image3.jpg
    # 添加更多图片资源

这个示例应该可以帮助你快速上手dynamic_stack_card_swiper插件,并创建一个基本的动态堆叠卡片轮播效果。如果你需要更多高级功能,请查阅该插件的官方文档。

回到顶部