Flutter动画效果插件animateable的使用
Flutter动画效果插件animateable的使用
一个为Flutter应用提供动画效果的包。
特性
- crossfade 淡入淡出动画当数据发生变化时
使用
此示例展示了该包的一个特性用法。
crossfade 示例
import 'package:animateable/animateable.dart';
import 'package:flutter/material.dart';
class CrossFadeExample extends StatefulWidget {
const CrossFadeExample({Key? key}) : super(key: key);
[@override](/user/override)
State<CrossFadeExample> createState() => _CrossFadeExampleState();
}
class _CrossFadeExampleState extends State<CrossFadeExample> {
DateTime current = DateTime.now();
late final Stream<String> timer;
[@override](/user/override)
void initState() {
timer = Stream.periodic(const Duration(seconds: 1), (i) {
current = current.add(const Duration(seconds: 1));
return 'current time is ${current.hour}:${current.minute}:${current.second}';
});
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
// 忽略不必要的容器
return Container(
child: StreamBuilder<String>(
stream: timer,
builder: (context, snapshot) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CrossFade<String?>(
initialData: 'initdata',
data: snapshot.data,
builder: (data) => Text('$data'),
)
],
);
},
),
);
}
}
其他信息
更多相关信息或需要联系我,可以查看我的 GitHub主页。
### 完整示例代码
```dart
import 'package:flutter/material.dart';
import 'home.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.pink,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: const Home(),
debugShowCheckedModeBanner: false,
);
}
}
更多关于Flutter动画效果插件animateable的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画效果插件animateable的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,animateable
并不是 Flutter 官方的一个核心库或插件,但 Flutter 社区中有许多动画相关的库和插件,例如 flutter_hooks
结合 animated_builder
可以实现复杂的动画效果。不过,基于你的要求,我会展示如何使用 Flutter 内置的动画系统来创建动画效果,这通常涉及到 AnimatedBuilder
、Tween
、AnimationController
等类。
下面是一个简单的例子,展示如何使用 Flutter 内置的动画系统来创建一个动画效果:
1. 添加必要的依赖
确保你的 pubspec.yaml
文件中包含必要的 Flutter SDK 版本(通常不需要额外添加动画相关的依赖,因为 Flutter SDK 已经内置了动画支持)。
dependencies:
flutter:
sdk: flutter
2. 创建动画效果
我们将创建一个简单的动画,其中一个 Container
会从屏幕左侧移动到右侧。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Animateable Example'),
),
body: Center(
child: MyAnimatedWidget(),
),
),
);
}
}
class MyAnimatedWidget extends StatefulWidget {
@override
_MyAnimatedWidgetState createState() => _MyAnimatedWidgetState();
}
class _MyAnimatedWidgetState extends State<MyAnimatedWidget> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<Offset> _animation;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(seconds: 2),
vsync: this,
)..repeat(reverse: true); // 不断往返动画
_animation = Tween<Offset>(
begin: Offset.zero,
end: Offset.fromDirection(1.0), // 从左到右
).animate(CurvedAnimation(
parent: _controller,
curve: Curves.easeInOut,
));
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return SlideTransition(
position: _animation,
child: Container(
width: 100,
height: 100,
color: Colors.blue,
child: Center(
child: Text(
'Animate',
style: TextStyle(color: Colors.white),
),
),
),
);
}
}
解释
-
导入必要的包:
import 'package:flutter/material.dart';
-
创建主应用:
void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Animateable Example'), ), body: Center( child: MyAnimatedWidget(), ), ), ); } }
-
创建动画组件:
- 继承
StatefulWidget
并创建其状态类。 - 使用
SingleTickerProviderStateMixin
混入,以便使用AnimationController
。 - 在
initState
方法中初始化动画控制器和动画。 - 使用
Tween
和CurvedAnimation
创建动画。 - 使用
SlideTransition
应用动画。
class MyAnimatedWidget extends StatefulWidget { @override _MyAnimatedWidgetState createState() => _MyAnimatedWidgetState(); } class _MyAnimatedWidgetState extends State<MyAnimatedWidget> with SingleTickerProviderStateMixin { late AnimationController _controller; late Animation<Offset> _animation; @override void initState() { super.initState(); _controller = AnimationController( duration: const Duration(seconds: 2), vsync: this, )..repeat(reverse: true); _animation = Tween<Offset>( begin: Offset.zero, end: Offset.fromDirection(1.0), ).animate(CurvedAnimation( parent: _controller, curve: Curves.easeInOut, )); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return SlideTransition( position: _animation, child: Container( width: 100, height: 100, color: Colors.blue, child: Center( child: Text( 'Animate', style: TextStyle(color: Colors.white), ), ), ), ); } }
- 继承
这个例子展示了如何使用 Flutter 内置的动画系统来创建一个简单的滑动动画。如果你想要使用更复杂的动画库或插件,可以探索如 flutter_hooks
、animations
等社区库。