Flutter 在另一个动画生成器颤振下滑动小部件
我有一个有两个小部件的页面,我正在寻找动画。我目前已经创建了我正在寻找的粗略动画,唯一的问题是我希望两个小部件中较大的一个滑动到另一个之下,而不是顶部。我已包括以下代码:Flutter 在另一个动画生成器颤振下滑动小部件,flutter,dart,flutter-animation,Flutter,Dart,Flutter Animation,我有一个有两个小部件的页面,我正在寻找动画。我目前已经创建了我正在寻找的粗略动画,唯一的问题是我希望两个小部件中较大的一个滑动到另一个之下,而不是顶部。我已包括以下代码: @override Widget build(BuildContext context) { return Scaffold( body: Row( children: <Widget>[ AnimatedBuilder( anim
@override
Widget build(BuildContext context) {
return Scaffold(
body: Row(
children: <Widget>[
AnimatedBuilder(
animation: transitionAnimation,
builder: (context, child) {
return SlideTransition(
position: Tween<Offset>(
begin: Offset(-1, 0),
end: Offset(0, 0),
).animate(CurvedAnimation(
curve: Interval(.01, 0.25, curve: Curves.easeInExpo),
parent: transitionAnimation)),
child: child);
},
child: Container(
width: MediaQuery.of(context).size.width * 0.15,
color: Colors.black,
),
),
AnimatedBuilder(
animation: transitionAnimation,
builder: (context, child) {
return SlideTransition(
position: Tween<Offset>(
begin: Offset(-2, 0),
end: Offset(0, 0),
).animate(CurvedAnimation(
curve: Interval(0, 1, curve: Curves.easeIn),
parent: transitionAnimation)),
child: child);
},
child: Container(
width: MediaQuery.of(context).size.width * 0.85,
color: Colors.orange,
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => FirstPage(),
));
},
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
);
@覆盖
小部件构建(构建上下文){
返回脚手架(
正文:世界其他地区(
儿童:[
动画生成器(
动画:过渡动画,
生成器:(上下文,子对象){
返回幻灯片转换(
位置:吐温(
开始:偏移量(-1,0),
结束:偏移量(0,0),
).动画(曲线动画)(
曲线:间隔(.01,0.25,曲线:曲线.o),
父项:转换(动画),
儿童:儿童);
},
子:容器(
宽度:MediaQuery.of(context).size.width*0.15,
颜色:颜色,黑色,
),
),
动画生成器(
动画:过渡动画,
生成器:(上下文,子对象){
返回幻灯片转换(
位置:吐温(
开始:偏移量(-2,0),
结束:偏移量(0,0),
).动画(曲线动画)(
曲线:间隔(0,1,曲线:Curves.easeIn),
父项:转换(动画),
儿童:儿童);
},
子:容器(
宽度:MediaQuery.of(context).size.width*0.85,
颜色:颜色。橙色,
),
),
],
),
浮动操作按钮:浮动操作按钮(
已按下:(){
导航器.of(上下文).push(MaterialPageRoute(
生成器:(上下文)=>FirstPage(),
));
},
),
浮动ActionButtonLocation:浮动ActionButtonLocation.centerFloat,
);
我对动画的速度和方向感到满意,唯一的问题是,正如我所说的,我希望橙色小部件滑到黑色的下方而不是上方。我曾尝试使用堆栈,但我没有成功地将橙色小部件放在页面的右侧
如果您有任何想法,我们将不胜感激。要从黑色小部件下方滑动橙色小部件,您可以尝试执行以下操作:
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:const MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
constMyHomepage({Key,this.title}):super(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态
使用SingleTickerProviderStateMixin{
动画控制器转换动画;
@凌驾
void initState(){
super.initState();
transitionAnimation=动画控制器(
持续时间:常数持续时间(秒数:5),
vsync:这个,,
);
transitionAnimation.forward();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:堆栈(
儿童:[
定位(
左:MediaQuery.of(context).size.width*0.15,
子对象:动画生成器(
动画:过渡动画,
生成器:(上下文,子对象){
返回幻灯片转换(
位置:吐温(
开始:常量偏移(-2,0),
结束:常量偏移量(0,0),
).动画(曲线动画)(
曲线:常数间隔(0,1,曲线:Curves.easeIn),
父项:转换(动画),
儿童:儿童);
},
子:容器(
高度:MediaQuery.of(context).size.height,
宽度:MediaQuery.of(context).size.width*0.85,
颜色:颜色。橙色,
),
),
),
定位(
左:0,,
子对象:动画生成器(
动画:过渡动画,
生成器:(上下文,子对象){
返回幻灯片转换(
位置:吐温(
开始:常量偏移量(-1,0),
结束:常量偏移量(0,0),
).动画(曲线动画)(
曲线:
常数间隔(.01,0.25,曲线:Curves.easeinfo),
父项:转换(动画),
儿童:儿童);
},
子:容器(
高度:MediaQuery.of(context).size.height,
宽度:MediaQuery.of(context).size.width*0.15,
颜色:颜色,黑色,
),
),
),
],
),
浮动操作按钮:浮动操作按钮(
已按下:(){
transitionAnimation.repeat();
//导航器.of(上下文).push(MaterialPageRoute(
//生成器:(上下文)=>FirstPage(),
// ));
},
),
浮动ActionButtonLocation:浮动ActionButtonLocation.centerFloat,
);
}
}
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage>
with SingleTickerProviderStateMixin {
AnimationController transitionAnimation;
@override
void initState() {
super.initState();
transitionAnimation = AnimationController(
duration: const Duration(seconds: 5),
vsync: this,
);
transitionAnimation.forward();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
Positioned(
left: MediaQuery.of(context).size.width * 0.15,
child: AnimatedBuilder(
animation: transitionAnimation,
builder: (context, child) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(-2, 0),
end: const Offset(0, 0),
).animate(CurvedAnimation(
curve: const Interval(0, 1, curve: Curves.easeIn),
parent: transitionAnimation)),
child: child);
},
child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width * 0.85,
color: Colors.orange,
),
),
),
Positioned(
left: 0,
child: AnimatedBuilder(
animation: transitionAnimation,
builder: (context, child) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(-1, 0),
end: const Offset(0, 0),
).animate(CurvedAnimation(
curve:
const Interval(.01, 0.25, curve: Curves.easeInExpo),
parent: transitionAnimation)),
child: child);
},
child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width * 0.15,
color: Colors.black,
),
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
transitionAnimation.repeat();
// Navigator.of(context).push(MaterialPageRoute(
// builder: (context) => FirstPage(),
// ));
},
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
);
}
}