Flutter动画效果插件magic_animate的使用
Flutter动画效果插件magic_animate的使用
Magic Animate
精美的动画效果灵感来源于magic.css,每个动画都以可定制的小部件形式呈现。
特性
使用Flutter完全实现了Magic.css动画库的交互效果。
开始使用
首先,你需要在pubspec.yaml
文件中添加magic_animate依赖:
dependencies:
magic_animate: ^x.x.x
然后,在你的Dart文件中导入magic_animate包:
import 'package:magic_animate/magic_animate.dart';
支持的动画
Magic Animate支持多种动画效果,包括但不限于以下几种:
MBoingWidget
MBombWidget
MFoolishWidget
MHole_outWidget
MMagicWidget
MOpenWidget
MPerspectiveWidget
MPuffWidget
MRotateWidget
MSlideWidget
MSpaceWidget
MSwapWidget
MSwashWidget
MTinWidget
MTwisterInWidget
MVanishWidget
使用方法
每个动画小部件都有一个onController
函数,该函数返回一个AnimationController
,允许你通过AnimationController
来控制动画的状态。以下是一个使用示例:
class MXXXWidget extends StatefulWidget {
final Widget child;
final Duration duration;
final MagicControllerFn onController;
final MXXXType type;
const MXXXWidget({
super.key,
required this.child,
required this.onController,
required this.type,
this.duration = const Duration(milliseconds: 1000),
});
[@override](/user/override)
State<MXXXWidget> createState() => _MXXXWidgetState();
}
class _MXXXWidgetState extends State<MXXXWidget> {
late AnimationController _controller;
[@override](/user/override)
void initState() {
super.initState();
_controller = AnimationController(vsync: this, duration: widget.duration);
widget.onController(_controller);
}
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return widget.child;
}
}
完整示例
下面是一个完整的示例代码,展示了如何使用Magic Animate插件创建一个具有多种动画效果的页面。
import 'package:example/conts.dart';
import 'package:example/magic_item.dart';
import 'package:example/magic_wrap.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Magic Animate',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFFFD287F)),
useMaterial3: true,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _selAnimation = '';
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFF17171E),
body: Column(
children: [
Container(
height: 200,
width: double.infinity,
alignment: Alignment.center,
child: Stack(
alignment: Alignment.center,
children: [
Container(
height: 100,
width: 100,
decoration: BoxDecoration(
color: const Color(0xFF3A3947),
borderRadius: BorderRadius.circular(10),
),
),
Positioned(
child: MagicWrap(
type: _selAnimation,
child: Container(
height: 100,
width: 100,
decoration: BoxDecoration(
color: const Color(0xFFFD287F),
borderRadius: BorderRadius.circular(10),
),
child: const Icon(Icons.flutter_dash, size: 50, color: Colors.white),
),
),
),
],
),
),
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(bottom: 100),
child: Column(
mainAxisSize: MainAxisSize.min,
children: magicList
.map((e) => MagicItem(
group: e,
onChange: (value) {
setState(() {
_selAnimation = value;
});
},
))
.toList(),
),
),
),
),
],
),
);
}
}
更多关于Flutter动画效果插件magic_animate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画效果插件magic_animate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用magic_animate
插件来实现动画效果的代码案例。magic_animate
是一个可以帮助你轻松创建复杂动画效果的Flutter插件。
首先,你需要在你的pubspec.yaml
文件中添加magic_animate
依赖:
dependencies:
flutter:
sdk: flutter
magic_animate: ^最新版本号 # 请替换为当前最新版本号
然后运行flutter pub get
来安装依赖。
接下来是一个简单的例子,演示如何使用magic_animate
来实现一个基本的动画效果。
main.dart
import 'package:flutter/material.dart';
import 'package:magic_animate/magic_animate.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Magic Animate Example'),
),
body: Center(
child: MagicAnimateExample(),
),
),
);
}
}
class MagicAnimateExample extends StatefulWidget {
@override
_MagicAnimateExampleState createState() => _MagicAnimateExampleState();
}
class _MagicAnimateExampleState extends State<MagicAnimateExample> with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(seconds: 2),
vsync: this,
)..repeat(reverse: true);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MagicAnimate(
animation: _controller,
child: Container(
width: 100,
height: 100,
color: Colors.blue,
child: Center(
child: Text(
'Animate',
style: TextStyle(color: Colors.white, fontSize: 20),
),
),
),
tween: Tween<double>(begin: 0, end: 300).animate(
CurvedAnimation(
parent: _controller,
curve: Curves.easeInOut,
),
),
builder: (context, value) {
return Transform.translate(
offset: Offset(value, 0),
child: child,
);
},
);
}
}
解释
-
依赖安装:在
pubspec.yaml
中添加magic_animate
依赖,然后运行flutter pub get
。 -
创建动画控制器:在
_MagicAnimateExampleState
中,我们创建了一个AnimationController
,并设置了动画的持续时间和vsync
(用于与屏幕刷新率同步)。 -
动画初始化与释放:在
initState
中初始化动画控制器,并在dispose
中释放它。 -
使用
MagicAnimate
:animation
:传入动画控制器。child
:这是你想要动画化的Widget。tween
:定义动画的值范围,这里我们使用了一个Tween<double>
从0到300。builder
:一个函数,接收上下文和当前动画值,并返回动画化的Widget。在这个例子中,我们使用Transform.translate
来根据动画值移动Widget。
这个简单的例子展示了如何使用magic_animate
来实现一个基本的平移动画。当然,magic_animate
插件提供了更多高级功能,你可以根据需求查阅其官方文档来获取更多信息和高级用法。