Flutter平滑动画列表插件smooth_animated_listview的使用
Flutter平滑动画列表插件smooth_animated_listview的使用
smooth_animated_list
一个为项目提供平滑过渡效果的动画列表插件。
特性
- 自动动画处理项的添加和移除
- 平滑的淡入淡出和大小变化过渡
- 支持自定义相等性检查
- 类型安全实现
- 简单的API
开始使用
在pubspec.yaml
文件中添加依赖:
dependencies:
smooth_animated_list: ^1.0.0
使用示例
基本用法
这是一个简单的例子:
SmoothAnimatedList<String>(
items: ['Item 1', 'Item 2', 'Item 3'],
itemBuilder: (context, item, animation) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(1, 0),
end: Offset.zero,
).animate(animation),
child: Card(
child: ListTile(
title: Text(item),
),
),
);
},
);
自定义对象相等性检查
对于具有自定义相等性的对象:
class Item {
final String id;
final String title;
Item(this.id, this.title);
}
SmoothAnimatedList<Item>(
items: [
Item('1', 'Item 1'),
Item('2', 'Item 2'),
Item('3', 'Item 3'),
],
itemBuilder: (context, item, animation) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(1, 0),
end: Offset.zero,
).animate(animation),
child: Card(
child: ListTile(
title: Text(item.title),
),
),
);
},
areItemsTheSame: (oldItem, newItem) => oldItem.id == newItem.id,
);
额外参数
duration
: 动画持续时间(默认:300ms)areItemsTheSame
: 自定义相等性检查函数
许可证
MIT许可证 - 详情请参阅LICENSE文件
### 完整示例代码
以下是完整的示例代码:
```dart
import 'package:flutter/material.dart';
import 'package:smooth_animated_listview/smooth_animated_listview.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const ListExample(),
);
}
}
class ListExample extends StatefulWidget {
const ListExample({super.key});
[@override](/user/override)
State<ListExample> createState() => _ListExampleState();
}
class _ListExampleState extends State<ListExample> {
List<String> data = ["0", "1", "2", "3", "5"];
bool show = true;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
onPressed: () {
setState(() {
show = !show;
});
},
icon: const Icon(Icons.hide_source),
),
IconButton(
onPressed: () {
setState(() {
data = List.generate(13, (int index) => "$index");
});
},
icon: const Icon(Icons.refresh),
)
],
),
body: show
? SmoothAnimatedList<String>(
key: Key("data.length.toString()"),
items: data,
itemBuilder: (context, item, animation) {
return SizeTransition(
sizeFactor: animation,
child: ListTile(
onTap: () {
data.remove(item);
setState(() {});
},
title: Text(item),
),
);
},
)
: const CircularProgressIndicator(),
);
}
}
更多关于Flutter平滑动画列表插件smooth_animated_listview的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter平滑动画列表插件smooth_animated_listview的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
smooth_animated_listview
是一个 Flutter 插件,用于创建平滑动画的列表视图。它可以让你在列表项插入、删除或重新排序时,自动应用平滑的动画效果。这个插件非常适合需要动态更新列表内容的场景,例如聊天应用、待办事项列表等。
安装
首先,你需要在 pubspec.yaml
文件中添加 smooth_animated_listview
依赖:
dependencies:
flutter:
sdk: flutter
smooth_animated_listview: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
下面是一个简单的示例,展示了如何使用 smooth_animated_listview
来创建一个带有平滑动画的列表视图。
import 'package:flutter/material.dart';
import 'package:smooth_animated_listview/smooth_animated_listview.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Smooth Animated ListView Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AnimatedListViewDemo(),
);
}
}
class AnimatedListViewDemo extends StatefulWidget {
@override
_AnimatedListViewDemoState createState() => _AnimatedListViewDemoState();
}
class _AnimatedListViewDemoState extends State<AnimatedListViewDemo> {
List<String> items = ['Item 1', 'Item 2', 'Item 3'];
void _addItem() {
setState(() {
items.add('Item ${items.length + 1}');
});
}
void _removeItem(int index) {
setState(() {
items.removeAt(index);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Smooth Animated ListView'),
),
body: SmoothAnimatedListView(
itemCount: items.length,
itemBuilder: (context, index, animation) {
return SizeTransition(
sizeFactor: animation,
child: Card(
margin: EdgeInsets.all(8.0),
child: ListTile(
title: Text(items[index]),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () => _removeItem(index),
),
),
),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: _addItem,
child: Icon(Icons.add),
),
);
}
}
代码解释
-
SmoothAnimatedListView:
itemCount
: 列表项的数量。itemBuilder
: 用于构建每个列表项的构建器。它接收BuildContext
、index
和animation
参数。animation
是一个Animation<double>
对象,可以用于控制列表项的动画效果。
-
SizeTransition:
sizeFactor
: 使用animation
来控制列表项的大小变化,从而实现平滑的插入和删除动画。
-
添加和删除列表项:
_addItem
方法用于向列表中添加新项。_removeItem
方法用于从列表中删除指定索引的项。
自定义动画
你可以根据需要自定义动画效果。例如,可以使用 FadeTransition
来实现淡入淡出效果,或者使用 SlideTransition
来实现滑动效果。
itemBuilder: (context, index, animation) {
return FadeTransition(
opacity: animation,
child: SizeTransition(
sizeFactor: animation,
child: Card(
margin: EdgeInsets.all(8.0),
child: ListTile(
title: Text(items[index]),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () => _removeItem(index),
),
),
),
),
);
},