Flutter动画效果插件widget_and_text_animator的使用
Flutter动画效果插件widget_and_text_animator的使用
介绍
widget and text animator
是一个Flutter插件,用于简化Widget和Text的动画创建。它可以让动画效果变得非常简单,并且可以创建出令人惊艳的效果!你可以在这里查看在线预览。
支持平台
- ALL
如何使用
添加依赖
在pubspec.yaml
文件中添加以下内容:
dependencies:
widget_and_text_animator: ^1.1.5
然后,在Dart代码中导入:
import 'package:widget_and_text_animator/widget_and_text_animator.dart';
基础用法
WidgetAnimator
WidgetAnimator
可以包装任何Widget,使其具有动画效果。它提供了三种主要功能:
- Incoming effects - 当Widget首次进入屏幕时显示的动画效果。
- At rest effects - 当Widget可见时显示的动画效果。
- Outgoing effects - 当Widget被替换时离开屏幕的动画效果。
示例:简单的Container动画
当Container首次进入屏幕时从底部滑入:
WidgetAnimator(
incomingEffect: WidgetTransitionEffects.incomingSlideInFromBottom(),
child: Container(
width: 100,
height: 100,
color: Colors.blue,
),
)
示例:持续摆动的Container
让Container在屏幕上持续摆动:
WidgetAnimator(
atRestEffect: WidgetRestingEffects.swing(),
child: Container(
width: 100,
height: 100,
color: Colors.blue,
),
)
示例:组合Incoming和At Rest动画
将FloatingActionButton首次进入屏幕时从底部滑入,并在显示时持续摆动:
WidgetAnimator(
incomingEffect: WidgetTransitionEffects.incomingSlideInFromBottom(),
atRestEffect: WidgetRestingEffects.swing(),
child: FloatingActionButton(
onPressed: (){},
tooltip: 'Increment',
child: const Icon(Icons.add),
),
)
Widget概述
主要Widget
该库包含四个主要的Widget:
WidgetAnimator
:为任何Widget添加动画效果,如透明度、偏移、模糊、倾斜、旋转、缩放等。WidgetAnimatorSequence
:基于时间或用户点击来动画化一系列WidgetAnimator
。TextAnimator
:作为标准Text
widget的直接替代品,赋予其强大的动画功能。TextAnimatorSequence
:类似于WidgetAnimatorSequence
,但适用于TextAnimator
widgets。
TextAnimator的重要性
虽然你可以通过WidgetAnimator
轻松地动画化Text
widget,但它会将整个文本作为一个整体处理。TextAnimator
的存在是为了对字符串中的每个字符进行处理,从而创建一些酷炫的交错效果。
更多细节
WidgetTransitionEffects
WidgetTransitionEffects
用于创建进出动画效果,以下是其主要属性:
属性 | 描述 | 默认值 |
---|---|---|
offset | 设置相对于正常位置的偏移量 | Offset(0,0) |
skew | X和Y轴上的倾斜程度 | Offset(0,0) |
scale | 缩放比例 | 1 |
blur | X和Y轴上的模糊程度 | Offset(0,0) |
rotation | 旋转弧度 | 0 |
opacity | 透明度范围 | 1 |
curve | 动画曲线 | Curve.easeInOut |
builder | 自定义动画构建器 | null |
duration | 动画持续时间 | Duration(milliseconds: 300) |
delay | 动画延迟时间 | null |
WidgetAtRestEffects
WidgetAtRestEffects
用于创建Widget在静止状态下的动画效果,以下是几种常见的构造函数:
WidgetRestingEffects.wave()
:使Widget上下波动。WidgetRestingEffects.pulse()
:改变Widget的透明度。WidgetRestingEffects.rotate()
:旋转Widget 360度。WidgetRestingEffects.bounce()
:抬起并弹回Widget。WidgetRestingEffects.slide()
:左右倾斜Widget。WidgetRestingEffects.swing()
:前后摆动Widget。WidgetRestingEffects.size()
:改变Widget的大小。WidgetRestingEffects.fidget()
:随机移动Widget。WidgetRestingEffects.dangle()
:基于顶部中心轴左右倾斜Widget。WidgetRestingEffects.vibrate()
:随机移动Widget的位置。
WidgetAnimatorSequence
WidgetAnimatorSequence
用于按顺序动画化一系列WidgetAnimator
,支持基于时间和用户点击触发。
示例:自动切换颜色的容器
每4秒自动切换一次颜色,并允许用户点击跳转:
return WidgetAnimatorSequence(
children: [
WidgetAnimator(
key: const ValueKey('one'),
incomingEffect: WidgetTransitionEffects.incomingScaleDown(),
outgoingEffect: WidgetTransitionEffects.outgoingScaleUp(),
child: Container(width: 200,height: 200,color: Colors.red,child: Align(alignment: Alignment.centerLeft,child: Text('Red')))),
WidgetAnimator(
key: const ValueKey('two'),
incomingEffect: WidgetTransitionEffects.incomingSlideInFromLeft(),
outgoingEffect: WidgetTransitionEffects.outgoingSlideOutToBottom(),
child: Container(width: 200,height: 200,color: Colors.green,child: Align(alignment: Alignment.centerLeft,child: Text('Green')))),
WidgetAnimator(
key: const ValueKey('three'),
incomingEffect: WidgetTransitionEffects(blur: const Offset(2,2), duration: const Duration(milliseconds: 600)),
atRestEffect: WidgetRestingEffects.slide(),
outgoingEffect: WidgetTransitionEffects(blur: const Offset(2,2), duration: const Duration(milliseconds: 600)),
child: Container(width: 200,height: 200,color: Colors.blue,child: Align(alignment: Alignment.centerLeft,child: Text('Blue'))))
],
tapToProceed: true,
loop: true,
transitionTime: const Duration(seconds: 4),
);
TextAnimator
TextAnimator
是Text
widget的替代品,它可以分割文本并为每个字符或单词创建动画效果。
示例:波浪文本
使文本逐字符出现并上下波动:
return Container(width: 200, height: 200, color: Colors.red,
child: TextAnimator('Wave text', atRestEffect: WidgetRestingEffects.wave(),)
);
TextAnimatorSequence
TextAnimatorSequence
用于按顺序动画化一系列TextAnimator
,支持基于时间和用户点击触发。
示例:自动切换文本
每4秒自动切换一次文本,并允许用户点击跳转:
return TextAnimatorSequence(
children: [
TextAnimator('Red',
incomingEffect: WidgetTransitionEffects.incomingScaleDown(),
atRestEffect: WidgetRestingEffects.bounce(),
outgoingEffect: WidgetTransitionEffects.outgoingScaleUp(),
style: GoogleFonts.sanchez(textStyle: const TextStyle(fontWeight: FontWeight.w900, color: Colors.red, letterSpacing: -2, fontSize: 64))),
TextAnimator('Green',
incomingEffect: WidgetTransitionEffects.incomingSlideInFromLeft(),
atRestEffect: WidgetRestingEffects.fidget(),
outgoingEffect: WidgetTransitionEffects.outgoingSlideOutToBottom(),
style: GoogleFonts.sanchez(textStyle: const TextStyle(fontWeight: FontWeight.w900, color: Colors.green, letterSpacing: -2, fontSize: 64))),
TextAnimator('Blue',
incomingEffect: WidgetTransitionEffects(blur: const Offset(2, 2), duration: const Duration(milliseconds: 600)),
atRestEffect: WidgetRestingEffects.wave(),
outgoingEffect: WidgetTransitionEffects(blur: const Offset(2, 2), duration: const Duration(milliseconds: 600)),
style: GoogleFonts.sanchez(textStyle: const TextStyle(fontWeight: FontWeight.w900, color: Colors.blue, letterSpacing: -2, fontSize: 64))),
],
tapToProceed: true,
loop: true,
transitionTime: const Duration(seconds: 4),
);
Keys
为了检测WidgetAnimator
的变化,可以通过更改child
类型或为其分配不同的key
来实现。例如:
WidgetAnimator(
incomingEffect: WidgetTransitionEffects.incomingSlideInFromLeft(),
outgoingEffect: WidgetTransitionEffects.outgoingSlideOutToRight(),
child: isBlue ? Container(key: ValueKey('blue'), width: 100, height: 100, color: Colors.blue) :
Container(key: ValueKey('red'), width: 100, height: 100, color: Colors.red)
)
自定义动画
如果默认效果无法满足需求,可以使用builder
属性自定义动画效果。例如,创建一个三角形路径的动画:
WidgetAnimator(
atRestEffect: WidgetRestingEffects(
duration: const Duration(seconds: 3),
builder: (WidgetRestingEffects effects, AnimationController animationController) {
AnimationSettings _animationSettings = AnimationSettings(animationController: animationController);
_animationSettings.offsetYAnimation = TweenSequence<double>(
[
TweenSequenceItem<double>(tween: Tween<double>(begin: 0, end: 150).chain(CurveTween(curve: Curves.easeInOut)), weight: 33.0,),
TweenSequenceItem<double>(tween: Tween<double>(begin: 150, end: 150).chain(CurveTween(curve: Curves.easeInOut)), weight: 33.0,),
TweenSequenceItem<double>(tween: Tween<double>(begin: 150, end: 0).chain(CurveTween(curve: Curves.easeInOut)), weight: 33.0,)
]
).animate(CurvedAnimation(parent: animationController, curve: Curves.linear));
_animationSettings.offsetXAnimation = TweenSequence<double>(
[
TweenSequenceItem<double>(tween: Tween<double>(begin: 0, end: 80).chain(CurveTween(curve: Curves.easeInOut)), weight: 33.0,),
TweenSequenceItem<double>(tween: Tween<double>(begin: 80, end: -80).chain(CurveTween(curve: Curves.easeInOut)), weight: 33.0,),
TweenSequenceItem<double>(tween: Tween<double>(begin: -80, end: 0).chain(CurveTween(curve: Curves.easeInOut)), weight: 33.0,)
]
).animate(CurvedAnimation(parent: animationController, curve: Curves.linear));
return _animationSettings;
},
),
child: Container(
width: 200,
height: 200,
color: Colors.amber,
child: const Center(
child: Padding(
padding: EdgeInsets.all(8.0),
child: Text('Hello'),
),
),
),
)
GestureAnimator
GestureAnimator
是一个可以直接替代GestureDetector
的Widget,它仅覆盖基本的onTap
手势,但允许通过几个属性为按下后的Widget添加动画效果。
示例:带有动画效果的按钮
按下按钮时缩小、向上移动并触发触觉反馈:
return GestureAnimator(
curve: Curves.easeInOut,
scaleSize: 0.9,
yOffset: -5,
duration: const Duration(milliseconds: 150),
hapticFeedback: HapticFeedback.selectionClick,
triggerOnTapAfterAnimationComplete: true,
onTap: (){
Navigator.of(context).push(Samples.route());
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(color: Colors.green, child: const Padding(
padding: EdgeInsets.all(12.0),
child: Text('Do not push me!'),
)),
),
);
更多示例
更多示例可以在GitHub项目中找到。
反馈与贡献
如果你遇到问题或有新功能的需求,请在这里提交issue或提出建议。
感谢支持
如果你喜欢这个包,欢迎请我喝杯咖啡!
更多关于Flutter动画效果插件widget_and_text_animator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画效果插件widget_and_text_animator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用widget_and_text_animator
插件来实现动画效果的一个简单示例。首先,你需要确保已经在pubspec.yaml
文件中添加了该插件的依赖:
dependencies:
flutter:
sdk: flutter
widget_and_text_animator: ^最新版本号 # 请替换为最新的版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用这个插件来创建动画效果。以下是一个基本的示例,展示了如何使用WidgetAnimator
和TextAnimator
来创建动画。
import 'package:flutter/material.dart';
import 'package:widget_and_text_animator/widget_and_text_animator.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Widget and Text Animator Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// 使用WidgetAnimator创建动画
WidgetAnimator(
duration: 2000, // 动画持续时间,单位为毫秒
animationType: AnimationType.bounce, // 动画类型
child: Container(
width: 100,
height: 100,
color: Colors.blue,
),
),
SizedBox(height: 20),
// 使用TextAnimator创建文本动画
TextAnimator(
duration: 1500,
animationType: AnimationType.fade,
text: 'Hello, Flutter!',
style: TextStyle(
fontSize: 24,
color: Colors.red,
),
),
],
),
),
),
);
}
}
在这个示例中,我们使用了WidgetAnimator
和TextAnimator
两个组件来创建动画效果。WidgetAnimator
用于对任何Widget进行动画处理,而TextAnimator
专门用于对文本进行动画处理。
duration
参数指定了动画的持续时间。animationType
参数指定了动画的类型,如弹跳(bounce)、淡入淡出(fade)等。
你可以根据需要调整这些参数以及子Widget的样式和属性。
确保你的Flutter环境已经正确配置,并且已经安装了所需的依赖包。运行这个示例,你应该能看到一个带有动画效果的Flutter应用。