flutter - 使用 AnimationPositioned 移动图像
问题描述
我正在尝试使用 AnimatedPositioned 将图像从中心移动到新位置 (50,10)。以下是我的代码
class _SplashScreenState extends State<SplashScreen> {
@override
Widget build(BuildContext context) {
return Container(
color: Color(0xFFFFFFFF),
child: Stack(
children: [
AnimatedPositioned(
duration: Duration(seconds: 3),
child: Align(
alignment: Alignment.bottomCenter,
child: Container(
child: Image(
image: AssetImage('images/img.png'),
width: 30,
height: 30,
),
),
),
top: 50,
left: 10,
)
],
),
);
}
出于某种原因,上面的代码没有做任何动画,并且图像在移动到左上角之前最初没有居中。我怎样才能解决它?
更新:
我也尝试过 AnimatedAlign,
return Container(
color: Color(0xFFFFFFFF),
child: AnimatedAlign(
duration: Duration(seconds: 3),
alignment: Alignment(50, 10),
curve: Curves.bounceOut,
child: Image(
image: AssetImage('images/img.png'),
width: 30,
height: 30,
),
),
);
由于某种原因,图像仍然没有移动
解决方案
替换为以下代码。这对我有用。:)
class _SplashScreenState extends State<SplashScreen>
with TickerProviderStateMixin {
AnimationController _animationController;
Animation _animation;
@override
void initState() {
_animationController =
AnimationController(vsync: this, duration: Duration(seconds: 3));
_animation = Tween<Offset>(begin: Offset(0.5, 0.5), end: Offset.zero)
.animate(_animationController);
_animationController.forward().whenComplete(() {
// when animation completes, put your code here
});
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Stack(
alignment: Alignment.center,
fit: StackFit.loose,
children: <Widget>[
// left = x value, top = y value;
// to set last position (50,10) top:50, left:10, end _animation Offset.zero
Positioned(
top: 50,
left: 10,
child: SlideTransition(
position: _animation,
child: AnimatedContainer(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
alignment: Alignment.topLeft,
duration: Duration(seconds: 0),
child: Image(
height: 50,
width: 50,
image: AssetImage('assets/img.png'),
),
),
),
),
],
),
),
);
}
}
推荐阅读
- symfony - 在 Symfony 5 的模板子文件夹中使用公用文件夹中的文件
- macos - 运行简单的 Selenium Runner 测试时出现“NoSuchSessionError:此驱动程序实例没有有效的会话 ID”
- flask - Falsk "ssl_context" 指向 Google 颁发的 SSL 证书
- node.js - 在导航栏中显示用户名
- ios - 快速转换在类签名中具有泛型的具体类型
- node.js - 如何使用 id 更新 mongoDB 数据?
- javascript - 在引导程序 Vue 表中对行进行分组
- python-3.x - 从大型 request_body 中分块读取数据
- r - 从数据框中创建一个带有嵌套节点的 XML 文件
- ef-fluent-api - 具有 Nullable 引用类型的 .Net Core Fluent API