Animation Can';t使移动容器在颤振中逐渐变大,从筛网中心开始变小
我一直在尝试制作一个从左到右过渡的容器,它的大小不断增大,直到到达中心,到达中心后,它的大小逐渐减小。 我尝试使用两个控制器和更多的Tween-s,但没有找到结果Animation Can';t使移动容器在颤振中逐渐变大,从筛网中心开始变小,animation,flutter,dart,containers,Animation,Flutter,Dart,Containers,我一直在尝试制作一个从左到右过渡的容器,它的大小不断增大,直到到达中心,到达中心后,它的大小逐渐减小。 我尝试使用两个控制器和更多的Tween-s,但没有找到结果 `import 'package:flutter/material.dart'; import 'package:flutter/animation.dart'; class Basic_animation_view extends StatefulWidget { @override _Basic_animation_v
`import 'package:flutter/material.dart';
import 'package:flutter/animation.dart';
class Basic_animation_view extends StatefulWidget {
@override
_Basic_animation_viewState createState() => _Basic_animation_viewState();
}
class _Basic_animation_viewState extends State<Basic_animation_view>
with TickerProviderStateMixin {
AnimationController controller;
Animation<Offset> animation;
Animation<Size> growAnimation;
@override
void initState() {
super.initState();
controller =
AnimationController(vsync: this, duration: const Duration(seconds: 3))
..addListener(() {
setState(() {});
});
animation = Tween<Offset>(begin: Offset(0, 0), end: Offset(5, 0))
.animate(controller);
growAnimation =
Tween<Size>(begin: Size(50.0, 50.0), end: Size(100.0, 100.0))
.animate(CurvedAnimation(parent: controller,curve: Curves.linear));
controller.repeat();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
SlideTransition(
position: animation,
child: Container(***strong text***
width:growAnimation.value.width,
height:growAnimation.value.height,
color: Colors.red,
),
),
],
));
}
}
`
`import'包:flatter/material.dart';
导入“package:flatter/animation.dart”;
类基本\u动画\u视图扩展StatefulWidget{
@凌驾
_基本_动画_视图状态createState()=>_基本_动画_视图状态();
}
类_基本_动画_视图状态扩展状态
使用TickerProviderStateMixin{
动画控制器;
动画;
动画成长动画;
@凌驾
void initState(){
super.initState();
控制器=
AnimationController(vsync:this,duration:const duration(秒:3))
…addListener(){
setState((){});
});
动画=Tween(开始:偏移(0,0),结束:偏移(5,0))
.制作动画(控制器);
成长动画=
吐温(开始:尺寸(50.0,50.0),结束:尺寸(100.0,100.0))
.animate(曲线动画(父对象:控制器,曲线:Curves.linear));
controller.repeat();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:专栏(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
幻灯片转换(
职位:动画,
子:容器(***强文本***
宽度:grownanimation.value.width,
高度:grownanimation.value.height,
颜色:颜色,红色,
),
),
],
));
}
}
`
也许动画容器类会更接近您想要的。你
可以使用包含更多详细信息的文档化样本查找更多详细信息
在博物馆找到的
//的颤振代码示例
//下面的示例(如上所示)转换AnimatedContainer
//在两个州之间。它调整[高度]、[宽度]、[颜色]和
//点击时的[对齐]属性。
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
///此小部件是主应用程序小部件。
类MyApp扩展了无状态小部件{
静态常量字符串_title='颤振代码示例';
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:_标题,
家:脚手架(
appBar:appBar(标题:常量文本(_title)),
正文:MyStatefulWidget(),
),
);
}
}
类MyStatefulWidget扩展了StatefulWidget{
MyStatefulWidget({Key}):超级(Key:Key);
@凌驾
_MyStatefulWidgetState createState()=>\u MyStatefulWidgetState();
}
类_MyStatefulWidgetState扩展状态{
bool selected=false;
@凌驾
小部件构建(构建上下文){
返回手势检测器(
onTap:(){
设置状态(){
选中=!选中;
});
},
儿童:中心(
子:动画容器(
宽度:选定?200.0:100.0,
高度:选定?100.0:200.0,
颜色:选定?颜色。红色:颜色。蓝色,
对齐:
选中?Alignment.center:Alignment directive.topCenter,
持续时间:持续时间(秒数:2),
曲线:Curves.FastOutSwowin,
儿童:标志(尺寸:75),
),
),
);
}
}
Tnx的答案,但我的主要问题是让容器从左到右连续移动,同时逐渐改变大小,使屏幕中心变大,从中心开始减小大小,直到屏幕结束。
// Flutter code sample for
// The following example (depicted above) transitions an AnimatedContainer
// between two states. It adjusts the [height], [width], [color], and
// [alignment] properties when tapped.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
static const String _title = 'Flutter Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: MyStatefulWidget(),
),
);
}
}
class MyStatefulWidget extends StatefulWidget {
MyStatefulWidget({Key key}) : super(key: key);
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
bool selected = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
setState(() {
selected = !selected;
});
},
child: Center(
child: AnimatedContainer(
width: selected ? 200.0 : 100.0,
height: selected ? 100.0 : 200.0,
color: selected ? Colors.red : Colors.blue,
alignment:
selected ? Alignment.center : AlignmentDirectional.topCenter,
duration: Duration(seconds: 2),
curve: Curves.fastOutSlowIn,
child: FlutterLogo(size: 75),
),
),
);
}
}