Flutter滑动操作插件flutter_slidable_plus_plus的使用

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

Flutter滑动操作插件flutter_slidable_plus_plus的使用

简介

flutter_slidable_plus_plus 是一个基于 flutter_slidable 的 Fork 项目,它实现了可滑动的列表项,并提供了方向滑动手势和可删除的功能。此插件允许用户在滑动时显示自定义的操作按钮,并且支持多种动画效果。

功能特性

  • 支持左/右(或上/下)滑动手势。
  • 可以通过滑动删除列表项。
  • 提供了4种内置的滑动手势动画。
  • 提供了2种内置的滑动操作组件。
  • 内置了一个删除动画。
  • 支持自定义布局和动画。
  • 支持通过构建器创建滑动操作,以便在动画过程中实现特殊效果。
  • 滑动操作点击后默认关闭滑动手势(可覆盖)。
  • 当最近的 Scrollable 组件开始滚动时,默认关闭滑动手势(可覆盖)。
  • 可以轻松禁用滑动效果。
  • 支持自定义图标。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_slidable_plus_plus: <latest_version>

然后在 Dart 文件中导入该库:

import 'package:flutter_slidable_plus_plus/flutter_slidable_plus_plus.dart';

使用示例

下面是一个完整的示例代码,展示了如何使用 flutter_slidable_plus_plus 插件来创建一个带有滑动操作的列表项。这个示例包括了左右两侧的滑动手势,并且每个滑动手势都包含两个操作按钮。

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

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

class MyApp extends StatefulWidget {
  const MyApp({
    Key? key,
  }) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin {
  late final controller = SlidableController(this);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Slidable Example',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Slidable Example'),
        ),
        body: ListView.builder(
          itemCount: 10, // 假设有10个列表项
          itemBuilder: (context, index) {
            return Slidable(
              // 指定一个 key,如果 Slidable 是可删除的
              key: ValueKey(index),

              // 左侧滑动手势
              startActionPane: ActionPane(
                // 控制滑动手势的动画效果
                motion: const ScrollMotion(),

                // 允许通过滑动删除 Slidable
                dismissible: DismissiblePane(onDismissed: () {
                  // 处理删除逻辑
                  setState(() {
                    // 这里可以移除列表项
                  });
                }),

                // 定义左侧滑动操作
                children: [
                  SlidableAction(
                    onPressed: (_) => print('Delete pressed'),
                    backgroundColor: const Color(0xFFFE4A49),
                    foregroundColor: Colors.white,
                    icon: Icons.delete,
                    label: 'Delete',
                  ),
                  SlidableAction(
                    onPressed: (_) => print('Share pressed'),
                    backgroundColor: const Color(0xFF21B7CA),
                    foregroundColor: Colors.white,
                    icon: Icons.share,
                    label: 'Share',
                  ),
                ],
              ),

              // 右侧滑动手势
              endActionPane: ActionPane(
                motion: const ScrollMotion(),
                children: [
                  SlidableAction(
                    // 可以设置更大的比例
                    flex: 2,
                    onPressed: (_) => print('Archive pressed'),
                    backgroundColor: const Color(0xFF7BC043),
                    foregroundColor: Colors.white,
                    icon: Icons.archive,
                    label: 'Archive',
                  ),
                  SlidableAction(
                    onPressed: (_) => print('Save pressed'),
                    backgroundColor: const Color(0xFF0392CF),
                    foregroundColor: Colors.white,
                    icon: Icons.save,
                    label: 'Save',
                  ),
                ],
              ),

              // 当不拖动时显示的内容
              child: ListTile(
                title: Text('Item $index'),
                subtitle: const Text('Slide me to reveal actions'),
              ),
            );
          },
        ),
      ),
    );
  }
}

动画效果

flutter_slidable_plus_plus 提供了四种不同的滑动手势动画效果:

  1. Behind Motion:动作按钮出现在 Slidable 后面,随着滑动逐渐显示出来。 Behind Motion

  2. Drawer Motion:动作按钮像抽屉一样从侧面滑出。 Drawer Motion

  3. Scroll Motion:动作按钮跟随 Slidable 一起滑动。 Scroll Motion

  4. Stretch Motion:动作按钮在滑动时被拉伸。 Stretch Motion

控制器

你可以使用 SlidableController 来编程方式打开或关闭滑动手势。例如:

final controller = SlidableController();

// 打开右侧滑动手势
controller.openEndActionPane();

// 打开左侧滑动手势
controller.openStartActionPane();

// 关闭所有滑动手势
controller.close();

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

1 回复

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


当然,下面是一个关于如何使用 flutter_slidable_plus_plus 插件的示例代码。这个插件允许你在 Flutter 应用中实现滑动操作,比如删除、收藏等功能。

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

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

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

以下是一个完整的示例代码,展示了如何使用 flutter_slidable_plus_plus 来创建一个带有滑动操作的列表项:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Slidable Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  final List<String> items = List<String>.generate(20, (i) => "Item $i");

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Slidable Example'),
      ),
      body: ListView.builder(
        itemCount: items.length,
        itemBuilder: (context, index) {
          return Slidable(
            key: Key('item_${items[index]}'),
            delegate: SlidableScrollDelegate(),
            actionPane: SlidableDrawerActionPane(),
            actions: <Widget>[
              IconSlideAction(
                caption: 'Archive',
                color: Colors.blue,
                icon: Icons.archive,
                onTap: () {
                  // 处理归档操作
                  print('Archived ${items[index]}');
                },
              ),
              IconSlideAction(
                caption: 'Delete',
                color: Colors.red,
                icon: Icons.delete,
                onTap: () {
                  // 处理删除操作
                  setState(() {
                    items.removeAt(index);
                  });
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Deleted ${items[index] ?? 'item'}')),
                  );
                },
              ),
            ],
            secondaryActions: <Widget>[
              IconSlideAction(
                caption: 'Favorite',
                color: Colors.orange,
                icon: Icons.favorite,
                onTap: () {
                  // 处理收藏操作
                  print('Favorited ${items[index]}');
                },
              ),
            ],
            child: ListTile(
              title: Text('${items[index]}'),
            ),
          );
        },
      ),
    );
  }
}

解释

  1. 依赖安装:首先在 pubspec.yaml 中添加 flutter_slidable_plus_plus 依赖。
  2. 导入包:在 Dart 文件中导入 flutter_slidable_plus_plus 包。
  3. 构建列表:使用 ListView.builder 构建一个列表,每个列表项都是一个 Slidable 组件。
  4. 定义动作:在 Slidable 中定义 actionssecondaryActions,这些动作会在用户滑动列表项时显示。
  5. 处理操作:为每个动作定义 onTap 回调,处理用户的操作,例如删除项或标记为收藏。

这样,你就可以在 Flutter 应用中实现带有滑动操作功能的列表项了。希望这个示例对你有帮助!

回到顶部