Flutter动画滚动项插件animated_scroll_item的使用
Flutter 动画滚动项插件 animated_scroll_item 的使用
Wrapper for the scrollable items (e.g. SingleChildScrollView, ListView). It allows you to highly customize behavior of visible items. Based on Flow widget
注意: 请注意,它尚未经过大型列表的测试。
Getting started
Installing
dependencies:
animated_scroll_item: ^0.0.3
Import
import 'package:animated_scroll_item/animated_scroll_item.dart';
How to use
将您的项目小部件包装在 AnimatedScrollItem
中,并提供其配置:
AnimatedScrollItem(
configs: [
ItemAnimationConfig(
// ...animation config
),
ItemAnimationConfig(
// ...another animation config
),
],
size: const Size(double.infinity, 120), // The size is required
// Provide your widget
child: SizedBox(
height: 120,
child: Card(
color: Colors.blue,
child: Center(
child: Text('$index'),
),
),
),
),
Configuration
AnimatedScrollItem
参数 | 描述 | 类型 | 默认值 |
---|---|---|---|
size | 每个项目占据的空间大小 | Size | 必填字段 |
configs | 动画配置列表,您可以定义任意数量的配置,但不能少于一个 | List<ItemAnimationConfig> | 必填字段 |
child | 您的列表项 | Widget | 必填字段 |
ItemAnimationConfig
参数 | 描述 | 类型 | 默认值 |
---|---|---|---|
itemTransform | 基于动画值定义动画项行为的回调。 | ItemTransformAnimation | 必填字段 |
opacityTransform | 基于动画值定义动画项不透明度的回调。 | ItemOpacityTransform | null |
animationRange | 项目在可见区域内的位置范围,进行动画。1 - 可见区域的末尾,0 - 开始 |
AnimationRange | AnimationRange(min: 0, max: 1) |
ItemTransformAnimation
提供一个 animationValue
范围从 0
到 1
的回调,itemSize
也可以用于您的动画,matrix
是一个 Matrix4
对象,您需要在此对象上应用您的变换。
例如:
itemTransform: (
double animationValue,
Size size,
Matrix4 matrix,
) {
return matrix
..scale(animationValue)
..setTranslation(
Vector3(size.width * (1 - animationValue) * .5, 0, 0));
},
ItemOpacityTransform
此回调允许您根据 animationValue
定义不透明度。
例如:
opacityTransform: (animationValue) => animationValue
AnimationRange
在这里,您可以定义可见列表的一部分,其中项目需要进行动画处理。它接受从 0
到 1
的值。
例如:
animationRange: const AnimationRange(min: 0, max: .1),
Contributing
欢迎创建 PR 或提出问题 :)
示例代码
import 'package:animated_scroll_item/animated_scroll_item.dart';
import 'package:flutter/material.dart';
import 'package:vector_math/vector_math_64.dart' hide Colors;
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Flutter Demo',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: ListView.builder(
padding: const EdgeInsets.symmetric(horizontal: 16),
itemCount: 30,
itemBuilder: (context, index) => AnimatedScrollItem(
configs: [
ItemAnimationConfig(
animationRange: const AnimationRange(min: 0, max: .1),
itemTransform: (
double animationValue,
Size size,
Matrix4 matrix,
) {
return matrix
..scale(animationValue)
..setTranslation(
Vector3(size.width * (1 - animationValue) * .5, 0, 0));
},
opacityTransform: (animationValue) => animationValue,
),
ItemAnimationConfig(
animationRange: const AnimationRange(min: .9),
itemTransform: (
double animationValue,
Size size,
Matrix4 matrix,
) {
return matrix
..scale(1 - animationValue)
..setTranslation(Vector3(size.width * animationValue, 0, 0));
},
opacityTransform: (animationValue) => 1 - animationValue,
),
],
size: const Size(double.infinity, 120),
child: SizedBox(
height: 120,
child: Card(
color: Colors.blue,
child: Center(
child: Text('$index'),
),
),
),
),
),
);
}
}
更多关于Flutter动画滚动项插件animated_scroll_item的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画滚动项插件animated_scroll_item的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,animated_scroll_item
是一个用于 Flutter 的强大插件,它可以帮助你创建带有动画效果的滚动项。下面是一个简单的示例,展示如何使用 animated_scroll_item
插件来实现一个带有动画效果的滚动列表。
首先,确保你已经在 pubspec.yaml
文件中添加了 animated_scroll_item
依赖:
dependencies:
flutter:
sdk: flutter
animated_scroll_item: ^x.y.z # 请替换为最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在你的 Flutter 应用中使用 animated_scroll_item
。下面是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:animated_scroll_item/animated_scroll_item.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Animated Scroll Item Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AnimatedScrollItemDemo(),
);
}
}
class AnimatedScrollItemDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Animated Scroll Item Demo'),
),
body: SingleChildScrollView(
child: Column(
children: [
AnimatedScrollItemBuilder(
itemCount: 10,
itemBuilder: (context, index) {
return AnimatedScrollItem(
index: index,
animationDuration: Duration(seconds: 1),
builder: (context, animation, index) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: Opacity(
opacity: animation.value,
child: Card(
child: ListTile(
title: Text('Item $index'),
),
),
),
);
},
);
},
),
],
),
),
);
}
}
代码解释:
-
依赖导入:
import 'package:animated_scroll_item/animated_scroll_item.dart';
-
AnimatedScrollItemBuilder
:itemCount
:滚动项的总数。itemBuilder
:构建每个滚动项的回调函数。
-
AnimatedScrollItem
:index
:当前滚动项的索引。animationDuration
:动画的持续时间。builder
:使用动画值构建每个滚动项的回调函数。在这个例子中,我们使用了Opacity
来实现淡入效果。
-
滚动项内容:
- 使用
Card
和ListTile
来展示每个滚动项的内容。
- 使用
运行这个示例代码,你会看到一个带有动画效果的滚动列表,每个项在滚动到视图时会有一个淡入的效果。
请根据你的实际需求调整动画效果、持续时间和滚动项内容。希望这个示例对你有帮助!