Flutter卡片滑动匹配插件flutter_tindercard的使用

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

Flutter卡片滑动匹配插件flutter_tindercard的使用

flutter_tindercard

Tinder/TanTan Card Widget.

截图

screenshot

开始使用

  1. pubspec.yaml 文件中添加依赖:

    dependencies:
      flutter_tindercard: ^0.1.7
  2. 导入包:

    import 'package:flutter_tindercard/flutter_tindercard.dart';
  3. 在布局中添加 TinderSwapCard,并编写单个卡片的布局构建器,即可获得类似探探的滑动卡片组件。

  4. 使用 CardSwipeCompleteCallback 获取滑动方向和索引。

  5. 使用 CardController 从外部触发滑动。在 TinderSwapCard 中初始化一个 CardController 参数,并调用其 triggerLefttriggerRight 方法来触发滑动。

  6. 使用 CardDragUpdateCallback 获取正在滑动的卡片的详细信息。

示例

查看完整示例代码 这里

示例代码

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

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

class MyApp extends StatelessWidget {
  // 这是应用的根部件。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ExampleHomePage(),
    );
  }
}

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

class _ExampleHomePageState extends State<ExampleHomePage> with TickerProviderStateMixin {
  List<String> welcomeImages = [
    "assets/welcome0.png",
    "assets/welcome1.png",
    "assets/welcome2.png",
    "assets/welcome2.png",
    "assets/welcome1.png",
    "assets/welcome1.png"
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    CardController controller; // 用于触发滑动。

    return new Scaffold(
      body: new Center(
        child: Container(
          height: MediaQuery.of(context).size.height * 0.6,
          child: new TinderSwapCard(
            swipeUp: true, // 允许向上滑动
            swipeDown: true, // 允许向下滑动
            orientation: AmassOrientation.BOTTOM, // 设置卡片的底部对齐方式
            totalNum: welcomeImages.length, // 总卡片数量
            stackNum: 3, // 卡片堆叠数量
            swipeEdge: 4.0, // 滑动边缘距离
            maxWidth: MediaQuery.of(context).size.width * 0.9, // 最大宽度
            maxHeight: MediaQuery.of(context).size.width * 0.9, // 最大高度
            minWidth: MediaQuery.of(context).size.width * 0.8, // 最小宽度
            minHeight: MediaQuery.of(context).size.width * 0.8, // 最小高度
            cardBuilder: (context, index) => Card(
              child: Image.asset('${welcomeImages[index]}'), // 构建每个卡片的图片
            ),
            cardController: controller = CardController(), // 初始化控制器
            swipeUpdateCallback: (DragUpdateDetails details, Alignment align) {
              /// 获取滑动卡片的方向
              if (align.x < 0) {
                // 卡片向左滑动
              } else if (align.x > 0) {
                // 卡片向右滑动
              }
            },
            swipeCompleteCallback: (CardSwipeOrientation orientation, int index) {
              /// 获取滑动完成后的方向和索引
            },
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


flutter_tindercard 是一个用于实现类似 Tinder 卡片滑动效果的 Flutter 插件。它可以让你轻松地在应用中实现卡片的滑动、匹配和取消匹配等功能。以下是如何使用 flutter_tindercard 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_tindercard 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_tindercard: ^0.0.1

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

2. 基本使用

以下是一个简单的示例,展示如何使用 flutter_tindercard 插件来实现卡片滑动效果:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Tinder Card Demo'),
        ),
        body: Center(
          child: TinderCardDemo(),
        ),
      ),
    );
  }
}

class TinderCardDemo extends StatefulWidget {
  @override
  _TinderCardDemoState createState() => _TinderCardDemoState();
}

class _TinderCardDemoState extends State<TinderCardDemo> {
  List<String> cards = [
    'Card 1',
    'Card 2',
    'Card 3',
    'Card 4',
    'Card 5',
  ];

  @override
  Widget build(BuildContext context) {
    return TinderSwapCard(
      orientation: AmassOrientation.BOTTOM,
      totalNum: cards.length,
      stackNum: 3,
      swipeEdge: 4.0,
      maxWidth: MediaQuery.of(context).size.width * 0.9,
      maxHeight: MediaQuery.of(context).size.height * 0.7,
      minWidth: MediaQuery.of(context).size.width * 0.8,
      minHeight: MediaQuery.of(context).size.height * 0.6,
      cardBuilder: (context, index) => Card(
        child: Center(
          child: Text(
            cards[index],
            style: TextStyle(fontSize: 24.0),
          ),
        ),
      ),
      swipeUpdateCallback: (DragUpdateDetails details, Alignment align) {
        // 滑动过程中的回调
        if (align.x < 0) {
          // 向左滑动
        } else if (align.x > 0) {
          // 向右滑动
        }
      },
      swipeCompleteCallback: (CardSwipeOrientation orientation, int index) {
        // 滑动完成的回调
        if (orientation == CardSwipeOrientation.LEFT) {
          // 向左滑动完成
        } else if (orientation == CardSwipeOrientation.RIGHT) {
          // 向右滑动完成
        }
      },
    );
  }
}

3. 参数说明

  • orientation: 卡片堆叠的方向,可以是 AmassOrientation.TOPAmassOrientation.BOTTOM
  • totalNum: 卡片的总数。
  • stackNum: 同时显示的卡片数量。
  • swipeEdge: 滑动的边界,表示卡片需要滑动多少距离才会触发滑动完成。
  • maxWidthmaxHeight: 卡片的最大宽度和高度。
  • minWidthminHeight: 卡片的最小宽度和高度。
  • cardBuilder: 构建卡片的回调函数,返回一个 Widget
  • swipeUpdateCallback: 滑动过程中的回调,可以获取当前的滑动方向和距离。
  • swipeCompleteCallback: 滑动完成后的回调,可以获取滑动的方向和卡片的索引。

4. 自定义卡片样式

你可以通过 cardBuilder 回调函数来自定义卡片的样式。例如,你可以在卡片中添加图片、按钮等元素。

cardBuilder: (context, index) => Card(
  child: Column(
    children: [
      Image.network('https://picsum.photos/200/300'),
      Text(
        cards[index],
        style: TextStyle(fontSize: 24.0),
      ),
      ElevatedButton(
        onPressed: () {
          // 按钮点击事件
        },
        child: Text('Click Me'),
      ),
    ],
  ),
),

5. 处理滑动事件

你可以通过 swipeUpdateCallbackswipeCompleteCallback 来处理滑动事件。例如,你可以根据滑动的方向来执行不同的操作。

swipeCompleteCallback: (CardSwipeOrientation orientation, int index) {
  if (orientation == CardSwipeOrientation.LEFT) {
    print('Card $index swiped left');
  } else if (orientation == CardSwipeOrientation.RIGHT) {
    print('Card $index swiped right');
  }
},
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!