动画小部件推动其他小部件
Animated widget pushes other widgets
我有一个位于页面顶部的动画小部件(图像),小部件下方应该有一个文本。
我使用大小转换小部件,它将所有小部件推到它自己下面。我不希望我的动画推动任何其他小部件。一切都应该留在原地。我期待这样的事情:
layout
Widget _animation() {
Image img= Image.asset(
'assets/images/myImg.jpg',
);
_controller.forward(from: 0);
return SizeTransition(
child: img,
sizeFactor: CurvedAnimation(
curve: Curves.fastOutSlowIn,
parent: _controller,
),
);
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
_animation(),
Text(
"My Text",
style: TextStyle(color: Colors.black87, fontSize: 30),
),
],
),
),
);
}
尝试使用 Stack 和 Positioned 元素,这样您的元素就会夹在您所在的元素上方 "moving"。将其视为 html 中的 position: absolute
。
尝试使用 SlideTransition
而不是 SizeTransition
,因为您想将图像从顶部移动到实际位置。
Widget _animation() {
Image img= Image.asset(
'assets/images/myImg.jpg',
);
_controller.forward(from: 0);
return SlideTransition(
child: img,
position: Tween<Offset>(begin: Offset(0.0, -1.0), end: Offset.zero)
.animate(_controller),
);
}
更多信息在这里:
https://docs.flutter.io/flutter/widgets/SlideTransition-class.html
实际上,如果您为它的父级指定了固定大小,SizeTransition 将不起作用。我正在向您展示如何使用 Stack
进行操作。
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Stack(
children: <Widget>[
Positioned(left: 0, child: _animation()),
Positioned(top: 100, child: Text("This is your text",)),
],
),
),
);
}
我有一个位于页面顶部的动画小部件(图像),小部件下方应该有一个文本。
我使用大小转换小部件,它将所有小部件推到它自己下面。我不希望我的动画推动任何其他小部件。一切都应该留在原地。我期待这样的事情:
layout
Widget _animation() {
Image img= Image.asset(
'assets/images/myImg.jpg',
);
_controller.forward(from: 0);
return SizeTransition(
child: img,
sizeFactor: CurvedAnimation(
curve: Curves.fastOutSlowIn,
parent: _controller,
),
);
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
_animation(),
Text(
"My Text",
style: TextStyle(color: Colors.black87, fontSize: 30),
),
],
),
),
);
}
尝试使用 Stack 和 Positioned 元素,这样您的元素就会夹在您所在的元素上方 "moving"。将其视为 html 中的 position: absolute
。
尝试使用 SlideTransition
而不是 SizeTransition
,因为您想将图像从顶部移动到实际位置。
Widget _animation() {
Image img= Image.asset(
'assets/images/myImg.jpg',
);
_controller.forward(from: 0);
return SlideTransition(
child: img,
position: Tween<Offset>(begin: Offset(0.0, -1.0), end: Offset.zero)
.animate(_controller),
);
}
更多信息在这里:
https://docs.flutter.io/flutter/widgets/SlideTransition-class.html
实际上,如果您为它的父级指定了固定大小,SizeTransition 将不起作用。我正在向您展示如何使用 Stack
进行操作。
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Stack(
children: <Widget>[
Positioned(left: 0, child: _animation()),
Positioned(top: 100, child: Text("This is your text",)),
],
),
),
);
}