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

Flutter中如何实现答对题目后自动显示并隐藏0.5秒Lottie成功动画?

解决方案:快速显示隐藏Lottie成功动画

核心思路

放弃showDialog,改用Stack叠加层或Overlay嵌入Lottie动画,规避Dialog自带的入场/退场动画,实现0.5秒快速显示后自动隐藏的轻量反馈效果。

具体实现步骤(Flutter为例)

1. 引入依赖

确保pubspec.yaml中添加Lottie依赖:

dependencies:
  lottie: ^2.7.0

2. 用Stack实现动画层

在游戏页面布局里,通过Stack将动画层叠在题目、输入框上方,默认隐藏,答对时触发显示并自动隐藏:

class MathGamePage extends StatefulWidget {
  @override
  _MathGamePageState createState() => _MathGamePageState();
}

class _MathGamePageState extends State<MathGamePage> {
  bool _showSuccessAnim = false;
  // 自定义变量:当前题目、用户输入内容等

  void _checkAnswer() {
    // 此处替换为你的答案判断逻辑
    bool answerIsCorrect = true;
    if (answerIsCorrect) {
      setState(() => _showSuccessAnim = true);
      // 0.5秒后自动隐藏动画并生成下一题
      Future.delayed(const Duration(milliseconds: 500), () {
        setState(() => _showSuccessAnim = false);
        _generateNewQuestion();
      });
    }
  }

  void _generateNewQuestion() {
    // 生成新题目的逻辑
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          // 游戏主内容区:题目、输入框、提交按钮
          Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                const Text("12 × 3 = ?"),
                TextField(decoration: const InputDecoration(hintText: "输入答案")),
                ElevatedButton(onPressed: _checkAnswer, child: const Text("提交")),
              ],
            ),
          ),
          // Lottie成功动画层
          if (_showSuccessAnim)
            Center(
              child: Lottie.asset(
                "assets/success_anim.json", // 替换为你的动画文件路径
                width: 150,
                height: 150,
                fit: BoxFit.contain,
              ),
            ),
        ],
      ),
    );
  }
}

3. 优化动画过渡效果

如果需要更自然的淡入效果,可给Lottie添加AnimatedOpacity:

if (_showSuccessAnim)
  Center(
    child: AnimatedOpacity(
      opacity: _showSuccessAnim ? 1.0 : 0.0,
      duration: const Duration(milliseconds: 100),
      child: Lottie.asset(
        "assets/success_anim.json",
        width: 150,
        height: 150,
        fit: BoxFit.contain,
      ),
    ),
  ),

为何不使用showDialog?

showDialog默认自带弹窗的入场、退场动画,时长无法精准控制到0.5秒内,且弹窗会强制遮挡页面并添加背景阴影,不符合你需要的“快速反馈后立即继续游戏”的轻量交互需求。


内容的提问来源于stack exchange,提问作者Andres Almeida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:08:18