Flutter可滑动按钮插件swipeable_button的使用

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

Flutter可滑动按钮插件 swipeable_button 的使用

swipeable_button 是一个用于创建可滑动按钮的 Flutter 插件。它提供了多种自定义选项,如高度、颜色、滑块样式等。

特性

  • 自定义大小:可以手动指定按钮的高度,宽度由父元素决定。
  • 触发次数:可以选择按钮是一次性触发还是无限次触发。
  • 标签内容:标签可以是任何类型的 Widget。
  • 样式匹配:可以根据应用风格自定义按钮和滑块的颜色。

Live Preview

你可以查看这里的示例页面。

使用步骤

1. 添加依赖

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

dependencies:
  swipeable_button: ^0.2.0

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

2. 导入库

在需要使用该插件的文件中导入:

import 'package:swipeable_button/swipeable_button.dart';

示例代码

以下是一个完整的示例 Demo,展示了如何使用 SwipeableButton 及其不同构造函数。

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

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

[@immutable](/user/immutable)
class SwipeableButtonExample extends StatelessWidget {
  const SwipeableButtonExample({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) => const MaterialApp(
        home: SwipeableButtonExampleHomePage(),
      );
}

[@immutable](/user/immutable)
class SwipeableButtonExampleHomePage extends StatelessWidget {
  const SwipeableButtonExampleHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: const Text("Swipeable Button Example"),
        ),
        body: Center(
          child: SizedBox(
            width: 300.0,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: SwipeableButton.simple(
                      label: const Center(
                          child: Text("Simple blue button",
                              style: TextStyle(
                                  color: Colors.white, fontSize: 16.0))),
                      color: Colors.blue.shade400,
                      thumbColor: Colors.blue.shade800,
                      onSwipe: () {
                        ScaffoldMessenger.of(context)
                            .showSnackBar(const SnackBar(
                          content: Text("Thank you for swiping!"),
                        ));
                      }),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: SwipeableButton.simple(
                      label: const Center(
                          child: Text("Simple red button",
                              style: TextStyle(
                                  color: Colors.white, fontSize: 16.0))),
                      color: Colors.red.shade400,
                      thumbColor: Colors.red.shade800,
                      onSwipe: () {
                        ScaffoldMessenger.of(context)
                            .showSnackBar(const SnackBar(
                          content: Text("Thank you for swiping!"),
                        ));
                      }),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: SwipeableButton(
                      label: const Center(
                          child: Text("Red to green thumb",
                              style: TextStyle(
                                  color: Colors.white, fontSize: 16.0))),
                      color: Colors.blue.shade400,
                      thumbBuilder: (BuildContext context,
                              double swipedFraction, bool isComplete) =>
                          SwipeableButtonSimpleThumb(
                            color: Color.lerp(
                                    Colors.red, Colors.green, swipedFraction) ??
                                Colors.red,
                            iconColor: Colors.black,
                            minWidth: 40.0,
                            isComplete: isComplete,
                          ),
                      onSwipe: () {
                        ScaffoldMessenger.of(context)
                            .showSnackBar(const SnackBar(
                          content: Text("Thank you for swiping!"),
                        ));
                      }),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: SwipeableButton.simpleSlidable(
                      label: const Center(
                          child: Text("Slidable blue button",
                              style: TextStyle(
                                  color: Colors.white, fontSize: 16.0))),
                      color: Colors.blue.shade400,
                      thumbColor: Colors.blue.shade800,
                      onSwipe: () {
                        ScaffoldMessenger.of(context)
                            .showSnackBar(const SnackBar(
                          content: Text("Thank you for swiping!"),
                        ));
                      }),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: SwipeableButton.simpleSlidable(
                      label: const Center(
                          child: Text("Slidable red button",
                              style: TextStyle(
                                  color: Colors.white, fontSize: 16.0))),
                      height: 40.0,
                      minThumbWidth: 40.0,
                      oneTime: true,
                      color: Colors.red.shade400,
                      thumbColor: Colors.red.shade800,
                      borderRadius: BorderRadius.circular(5.0),
                      onSwipe: () {
                        ScaffoldMessenger.of(context)
                            .showSnackBar(const SnackBar(
                          content: Text("Thank you for swiping!"),
                        ));
                      }),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: SwipeableButton(
                      label: const Center(
                          child: Text("Custom thumb",
                              style: TextStyle(
                                  color: Colors.white, fontSize: 16.0))),
                      color: Colors.blue.shade400,
                      minThumbWidth: 40.0,
                      thumbBuilder: (BuildContext context,
                              double swipedFraction, bool isComplete) =>
                          Padding(
                            padding: const EdgeInsets.all(2.0),
                            child: DecoratedBox(
                              decoration: BoxDecoration(
                                  color: swipedFraction < 0.5
                                      ? Color.lerp(Colors.red, Colors.yellow,
                                          2.0 * swipedFraction)
                                      : Color.lerp(Colors.yellow, Colors.green,
                                          2.0 * swipedFraction - 1.0),
                                  borderRadius: BorderRadius.circular(16.0)),
                              child: Row(
                                mainAxisAlignment: MainAxisAlignment.end,
                                children: <Widget>[
                                  SizedBox(
                                    width: 36.0,
                                    child: isComplete
                                        ? const Icon(
                                            Icons.sentiment_very_satisfied,
                                            color: Colors.white)
                                        : const Icon(
                                            Icons.sentiment_very_dissatisfied,
                                            color: Colors.white),
                                  ),
                                ],
                              ),
                            ),
                          ),
                      onSwipe: () {
                        ScaffoldMessenger.of(context)
                            .showSnackBar(const SnackBar(
                          content: Text("Thank you for swiping!"),
                        ));
                      }),
                ),
              ],
            ),
          ),
        ),
      );
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用swipeable_button插件的一个简单示例。swipeable_button是一个允许用户通过滑动来激活的按钮插件。首先,你需要确保你的Flutter项目中已经添加了swipeable_button插件。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加swipeable_button依赖:

dependencies:
  flutter:
    sdk: flutter
  swipeable_button: ^latest_version  # 请替换为实际的最新版本号

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

2. 导入插件

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

import 'package:swipeable_button/swipeable_button.dart';

3. 使用SwipeableButton

下面是一个简单的示例,展示了如何使用SwipeableButton

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Swipeable Button Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Swipeable Button Demo'),
        ),
        body: Center(
          child: SwipeableButton(
            onSwiped: (direction) {
              print('Button swiped in direction: $direction');
              // 在这里处理滑动事件,例如显示一个Snackbar
              ScaffoldMessenger.of(context).showSnackbar(
                Snackbar(
                  content: Text('Button swiped: $direction'),
                  action: SnackbarAction(
                    label: 'Undo',
                    onPressed: () {
                      // 处理撤销操作
                    },
                  ),
                ),
              );
            },
            child: Container(
              width: 200,
              height: 60,
              decoration: BoxDecoration(
                color: Colors.blue,
                borderRadius: BorderRadius.circular(10),
              ),
              alignment: Alignment.center,
              child: Text(
                'Swipe Me',
                style: TextStyle(color: Colors.white, fontSize: 20),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

解释

  • SwipeableButton: 这是插件提供的主要组件。
  • onSwiped: 当按钮被滑动时,这个回调函数会被调用。它接受一个Direction枚举值,表示滑动的方向(leftrightupdown)。
  • child: 这个参数允许你定义按钮的内容,比如文本、图标等。

在这个示例中,当用户滑动按钮时,会在控制台打印滑动的方向,并在屏幕上显示一个Snackbar,显示滑动的方向。

注意

  • 确保你的Flutter环境已经正确设置,并且swipeable_button插件的版本是最新的。
  • 根据你的需求,你可以自定义SwipeableButton的外观和行为。

希望这个示例能帮助你在Flutter项目中成功使用swipeable_button插件!

回到顶部