Flutter动画重排序列表插件animated_reorderable_list_view的使用

Flutter动画重排序列表插件animated_reorderable_list_view的使用

这个库是一个易于使用的解决方案,用于在Flutter中实现带有拖放功能的动画列表。

特性

  • ✅ 在列表项插入和移除时,平滑过渡并带有动画效果。
  • ✅ 支持拖放(可重新排序)功能,并带有动画效果。
  • ✅ 该类是标准 ReorderableListView 的扩展,可以利用其所有功能。ReorderableListView 类
  • ✅ 可以同时进行动画和重新排序。
  • ✅ 更新列表即可轻松实现动画。
  • ✅ 可自定义动画。
  • ✅ 支持重新排序、插入、移除、移动、交换、多移除等操作。

安装

flutter pub add animated_reorderable_list_view
flutter pub get

使用

以下是一个完整的示例代码,展示了如何使用 animated_reorderable_list_view 插件来创建一个具有动画效果的可重新排序列表。

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

class AnimatedReorderableListViewExampleState
    extends State<AnimatedReorderableListViewExample>
    with SingleTickerProviderStateMixin {
  // 初始化列表数据
  final List<String> _items = List.generate(10, (index) => 'Item ${index + 1}');

  // 动画控制器
  late final AnimationController animationController;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 设置动画持续时间为500毫秒
    animationController = AnimationController(
      vsync: this,
      duration: const Duration(milliseconds: 500),
    );
  }

  [@override](/user/override)
  void dispose() {
    // 释放动画控制器资源
    animationController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 创建可重新排序的列表视图
    var animatedReorderableListView = AnimatedReorderableListView(
      state: this,
      items: _items, // 列表数据
      animationController: animationController, // 动画控制器
      onReorder: (oldIndex, newIndex) {
        // 当列表项重新排序时触发
        setState(() {
          // 插入新位置,并从旧位置移除
          _items.insert(oldIndex < newIndex ? newIndex - 1 : newIndex,
              _items.removeAt(oldIndex));
        });
      },
      children: [
        // 构建每个列表项
        for (int i = 0; i < _items.length; ++i)
          ListTile(
            key: GlobalKey(), // 必须为每个列表项设置唯一key
            title: Text(_items[i]), // 显示的文本
            trailing: ReorderableDragStartListener( // 拖动图标
              index: i,
              child: const Icon(Icons.drag_handle),
            ),
          )
      ],
    );

    return Scaffold(
      appBar: AppBar(
        actions: [
          // 添加按钮
          IconButton(
            icon: const Icon(Icons.add),
            onPressed: () {
              // 在第一个位置插入新项目
              animatedReorderableListView.insert(0, 'New Item');
            },
          ),
          // 删除按钮
          IconButton(
            icon: const Icon(Icons.delete),
            onPressed: () {
              // 移除第一个项目
              animatedReorderableListView.removeAt(0);
            },
          ),
        ],
      ),
      body: animatedReorderableListView, // 显示可重新排序的列表视图
    );
  }
}

更多关于Flutter动画重排序列表插件animated_reorderable_list_view的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter动画重排序列表插件animated_reorderable_list_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


animated_reorderable_list_view 是一个 Flutter 插件,用于创建带有动画效果的可重排序列表。它允许用户通过拖拽来重新排列列表项,并且在重排序过程中会显示平滑的动画效果。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  animated_reorderable_list_view: ^1.0.0  # 请使用最新版本

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

基本用法

以下是一个简单的示例,展示了如何使用 animated_reorderable_list_view 插件来创建一个可重排序的列表:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Animated Reorderable ListView'),
        ),
        body: ReorderableListExample(),
      ),
    );
  }
}

class ReorderableListExample extends StatefulWidget {
  @override
  _ReorderableListExampleState createState() => _ReorderableListExampleState();
}

class _ReorderableListExampleState extends State<ReorderableListExample> {
  List<String> items = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'];

  @override
  Widget build(BuildContext context) {
    return AnimatedReorderableListView(
      children: items
          .map((item) => ListTile(
                key: ValueKey(item),
                title: Text(item),
              ))
          .toList(),
      onReorder: (oldIndex, newIndex) {
        setState(() {
          if (oldIndex < newIndex) {
            newIndex -= 1;
          }
          final item = items.removeAt(oldIndex);
          items.insert(newIndex, item);
        });
      },
    );
  }
}

代码解释

  1. AnimatedReorderableListView: 这是插件提供的主要组件,用于显示可重排序的列表。它接受一个 children 参数,该参数是一个 Widget 列表,表示列表中的每一项。

  2. onReorder: 这是一个回调函数,当用户拖拽列表项并释放时触发。它接收两个参数:oldIndexnewIndex,分别表示拖拽项的原始位置和目标位置。在这个回调函数中,我们更新 items 列表的顺序,并调用 setState 来刷新 UI。

  3. ListTile: 我们使用 ListTile 作为列表项,每个 ListTile 都有一个唯一的 key,这是 Flutter 用来识别和动画化列表项的关键。

自定义动画

AnimatedReorderableListView 提供了多种自定义选项,例如动画持续时间、动画曲线等。你可以通过设置 durationcurve 参数来调整动画效果:

AnimatedReorderableListView(
  children: items
      .map((item) => ListTile(
            key: ValueKey(item),
            title: Text(item),
          ))
      .toList(),
  onReorder: (oldIndex, newIndex) {
    setState(() {
      if (oldIndex < newIndex) {
        newIndex -= 1;
      }
      final item = items.removeAt(oldIndex);
      items.insert(newIndex, item);
    });
  },
  duration: Duration(milliseconds: 500),  // 动画持续时间
  curve: Curves.easeInOut,  // 动画曲线
);
回到顶部