You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 如何实现图片或Widget的动画移动效果?

Flutter 实现 Widget 位移动画(启动页Logo滑入效果)

实现效果说明

可以实现启动后延迟指定时间(比如3秒),Logo从屏幕顶部外平滑移动到屏幕正中心,全程不需要引入第三方依赖,用Flutter内置动画组件即可完成。

完整可运行示例代码

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Logo 滑入动画',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const SplashPage(),
    );
  }
}

class SplashPage extends StatefulWidget {
  const SplashPage({super.key});

  @override
  State<SplashPage> createState() => _SplashPageState();
}

class _SplashPageState extends State<SplashPage> {
  // 控制Logo是否移动到中心的标识
  bool _moveToCenter = false;
  // 固定Logo的尺寸,可自行修改
  final double _logoSize = 120;

  @override
  void initState() {
    super.initState();
    // 启动后延迟3秒触发动画,时长可自行修改
    Future.delayed(const Duration(seconds: 3), () {
      setState(() {
        _moveToCenter = true;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    // 获取屏幕尺寸
    final screenHeight = MediaQuery.of(context).size.height;

    return Scaffold(
      body: Stack(
        children: [
          // 用AnimatedPositioned实现自动位移动画
          AnimatedPositioned(
            // 动画时长,设置为1秒,可自行调整快慢
            duration: const Duration(milliseconds: 1000),
            // 动画曲线,默认线性,这里用easeOut更符合自然动效
            curve: Curves.easeOut,
            left: 0,
            right: 0,
            // 初始状态top为负的Logo高度,完全在屏幕顶部外侧
            // 触发后top为(屏幕高度-Logo高度)/2,实现垂直居中
            top: _moveToCenter ? (screenHeight - _logoSize) / 2 : -_logoSize,
            child: Center(
              // 这里替换成你自己的Logo组件即可
              child: FlutterLogo(size: _logoSize),
            ),
          )
        ],
      ),
    );
  }
}

核心逻辑说明

  • 你可以直接替换示例中的FlutterLogo为任意自定义Widget,不管是图片、容器还是其他组合组件都可以复用这个动效逻辑
  • 延迟时长、动画时长、动效曲线都可以按需调整:修改Future.delayed的duration参数改等待时间,修改AnimatedPositioned的duration参数改动画速度,修改curve参数调整动效节奏
  • 如果需要额外的透明度、缩放等组合动效,可以嵌套AnimatedOpacity、AnimatedScale等其他隐式动画组件,和位移逻辑完全兼容

内容的提问来源于stack exchange,提问作者Amirreza zahed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:45:02