flutter - Flutter:一次多次使用相同的动画小部件
问题描述
由于我在其他地方没有找到任何问题的答案,我会在这里尝试。我想显示多个小部件,它们具有相同的类型并且都有一个动画。没有显示错误,但只会显示一个带有动画的小部件。我怎样才能防止它发生?
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
@override
MyAppState createState() => new MyAppState();
}
class MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
final title = 'Animated Container on Build';
return new MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Row(
children: <Widget>[
AniContainer(),
AniContainer()
],
)
),
);
}
}
class AniContainer extends StatefulWidget {
@override
_AniContainerState createState() => _AniContainerState();
}
class _AniContainerState extends State<AniContainer> with TickerProviderStateMixin{
AnimationController _animationController;
@override
void initState() {
super.initState();
_animationController= AnimationController(vsync: this, duration: Duration(milliseconds: 1000),value: 1)..reverse();
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
SizeTransition(
axis: Axis.vertical,
sizeFactor: _animationController,
child: Container(
height: 100,
width: 100,
color: Colors.red,
),
),
Container(
width: 100,
height: 100,
color: Colors.grey,
)
],
);
}
}
解决方案
很抱歉您的代码没有问题或缺少密钥
这是一个很好的例子
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
@override
MyAppState createState() => new MyAppState();
}
class MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
final title = 'Animated Container on Build';
return new MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Row(
children: <Widget>[
AniContainer(),
new Container(width: 10.0,),
AniContainer()
],
),
floatingActionButton: new FloatingActionButton(
onPressed: () => setState(() {}),
),
),
);
}
}
class AniContainer extends StatefulWidget {
@override
_AniContainerState createState() => _AniContainerState();
}
class _AniContainerState extends State<AniContainer> with TickerProviderStateMixin{
AnimationController _animationController2;
@override
void initState() {
super.initState();
_animationController= AnimationController(vsync: this, duration: Duration(milliseconds: 3000),value: 1)..reverse();
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
// here are the animationController to can see the animation every tab on FloatingActionButton
_animationController= AnimationController(vsync: this, duration: Duration(milliseconds: 3000),value: 1)..reverse();
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
SizeTransition(
axis: Axis.vertical,
sizeFactor: _animationController,
child: Container(
height: 100,
width: 100,
color: Colors.red,
),
),
Container(
width: 100,
height: 100,
color: Colors.grey,
)
],
);
}
}
推荐阅读
- r - 在乳胶模板中使用部分作为摘要
- python - Python 多处理运行自己而不是导入的脚本
- spring - JPA 实体默认构造函数覆盖 n-args 构造函数
- java - Eclipse 创建的 jar 文件无法运行
- python - 使用 matplotlib 从 pandas 数据框中绘制特定数据
- list - 如何动态地将数据添加到这样的列表中 [Dart]
- javascript - 如何在本地机器上运行 puppeteer 24/7
- swift - 在应用程序之间共享核心数据。应用程序组、iCloud
- javascript - 从另一个 Hook 访问 setState 方法
- javascript - 将 API 数据推送到 Chart.js