Flutter滑动卡片插件swipeable_card的使用

Swipeable Card (v1.x.x)

为游戏或交互式引导屏幕添加类似滑动手势的卡片小部件。

Pub
PRs 欢迎
许可证
捐赠


目录


🎮 示例

Demo

SwipeableWidget(适合高性能设备,如iPhone)

Demo 1

SwipeableWidgetSlide(适合性能较低的设备,如旧款Android设备)
  • SwipeableWidgetSlide的演示图将稍后添加。

如果无法看到演示,请查看仓库

应用示例

Swipeable Widget 在以下应用中使用:

  • Shots
  • 创建PR以添加您的应用!

📒 文档

安装

pubspec.yaml 中添加 swipeable_card

dependencies:
  flutter:
    sdk: flutter

  # 添加以下行
  swipeable_card: <最新版本>

添加到您的应用

Swipeable 小部件必须放置在一个 Stack 中,例如:

Stack(
  children: <Widget>[
    SwipeableWidget(
      // 参数...
      child: someChildWidget(),
    ),
  ],
)

在上述示例中,将 someChildWidget() 替换为可以滑动的小部件(例如,类似于扑克牌的小部件)。

警告:虽然 SwipeableWidget 在iPhone上运行速度较快,但在旧款Android设备上可能会较慢。我正在开发 SwipeableWidgetSlide,这是一种可以在旧款Android设备上使用的替代方案。

参数

int animationDuration
  • 动画持续时间,决定:
    • 小部件回到原点所需的时间。
    • 小部件从屏幕上动画离开所需的时间。

默认值:700

double horizontalThreshold
  • 水平滑动的阈值位置,超过该位置时调用 onHorizontalSwipe 函数。

默认值:0.85

double verticalThreshold
  • 垂直滑动的阈值位置,超过该位置时调用 onVerticalSwipe 函数。

未实现

默认值:0.95

Function onLeftSwipe
  • 当卡片向左滑动超过水平阈值时调用的函数。如果您正在制作卡牌游戏,这里可以调用下一张卡的函数。
Function onRightSwipe
  • 类似于 onLeftSwipe
SwipeableWidgetController swipeableWidgetController
  • 可以自动滑动卡片(无需用户交互)的控制器。

方法包括:

  • _swipeableWidgetController.triggerSwipeLeft()
  • _swipeableWidgetController.triggerSwipeRight()

另外两个方法也存在,但尚未实现:

  • _swipeableWidgetController.triggerSwipeTop()
  • _swipeableWidgetController.triggerSwipeBottom()
double scrollSensitivity
  • 滑动灵敏度
Widget child (必需)
  • 将要滑动的小部件。
List children
  • 背后的子部件。

这些可以是卡牌游戏中的其他卡牌。


基本示例

SwipeableWidget(
  child: CardExample(text: "This is card"),
  nextCards: [
    CardExample(text: "This is the card"),
    CardExample(text: "This is third card"),
  ],
  onLeftSwipe: () => print("Card swiped!"),
  onRightSwipe: () => print("Card swiped!"),
)

有关更多详细信息,请参阅示例。它包含有关如何使用 swipeable widget controller 的详细说明。


😐 问题与限制

如果您使用 swipeableWidgetController 自动滑动卡片(无需用户拖动),则只有当上一张卡片完全滑出时,才能开始滑动下一张卡片。要查看演示,请运行示例,并连续点击屏幕底部的“左”按钮。

除此之外,所有来自 v0.0.x 的其他问题似乎都已解决。


📝 其他信息

项目启动日期:2020年5月1日。

此包是从我的应用程序 Shots 中提取的。查看它!


示例代码

以下是完整的示例代码:

// 检查 https://github.com/ninest/swipeable_card/tree/master/example
// 以获取更好的解释

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

import 'example_route.dart';
import 'example_slide_route.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 设置全屏应用
    SystemChrome.setEnabledSystemUIOverlays([]);

    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData.dark().copyWith(
        // 让背景颜色更暗,突出卡片!
        scaffoldBackgroundColor: Color(0xFF111111),
      ),
      // home: ExampleRoute(),
      home: ExampleRouteSlide(),
    );
  }
}

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

1 回复

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


swipeable_card 是一个用于 Flutter 的插件,允许你创建可以滑动的卡片。这个插件非常适合用于实现类似 Tinder 的滑动卡片效果。以下是如何使用 swipeable_card 插件的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  swipeable_card: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 swipeable_card 插件:

import 'package:swipeable_card/swipeable_card.dart';

3. 使用 SwipeableCard

SwipeableCard 是一个可以滑动的卡片组件。你可以通过设置 onSwipeLeftonSwipeRight 回调来处理滑动事件。

以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SwipeableCardExample(),
    );
  }
}

class SwipeableCardExample extends StatefulWidget {
  @override
  _SwipeableCardExampleState createState() => _SwipeableCardExampleState();
}

class _SwipeableCardExampleState extends State<SwipeableCardExample> {
  final List<String> cards = [
    'Card 1',
    'Card 2',
    'Card 3',
    'Card 4',
  ];

  int currentIndex = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Swipeable Card Example'),
      ),
      body: Center(
        child: currentIndex < cards.length
            ? SwipeableCard(
                child: Card(
                  child: Center(
                    child: Text(
                      cards[currentIndex],
                      style: TextStyle(fontSize: 24),
                    ),
                  ),
                ),
                onSwipeLeft: () {
                  setState(() {
                    currentIndex++;
                  });
                  print('Swiped left');
                },
                onSwipeRight: () {
                  setState(() {
                    currentIndex++;
                  });
                  print('Swiped right');
                },
              )
            : Text('No more cards!'),
      ),
    );
  }
}

4. 解释代码

  • SwipeableCard 是一个可以滑动的卡片组件。
  • child 属性是卡片的内容,你可以在这里放置任何 Widget
  • onSwipeLeftonSwipeRight 是滑动事件的回调函数。当用户向左或向右滑动卡片时,这些函数会被调用。
  • currentIndex 用于跟踪当前显示的卡片索引。当用户滑动卡片时,currentIndex 会增加,显示下一张卡片。

5. 自定义滑动行为

你可以通过设置 swipeThresholdswipeVelocityThreshold 来自定义滑动的敏感度:

SwipeableCard(
  child: Card(
    child: Center(
      child: Text(
        cards[currentIndex],
        style: TextStyle(fontSize: 24),
      ),
    ),
  ),
  onSwipeLeft: () {
    setState(() {
      currentIndex++;
    });
    print('Swiped left');
  },
  onSwipeRight: () {
    setState(() {
      currentIndex++;
    });
    print('Swiped right');
  },
  swipeThreshold: 0.5, // 滑动阈值
  swipeVelocityThreshold: 0.5, // 滑动速度阈值
),
回到顶部