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

Flutter中是否存在可对Lottie动画进行预缓存的实现方法?

可以采用和SVG预缓存类似的逻辑实现Lottie动画资源的预加载,从根本上解决首次渲染延迟的问题。

实现步骤

  1. 提前预加载Lottie资源
    在main方法中完成Flutter初始化后,将Lottie资源的加载逻辑加入到原有Future.wait队列中,和SVG资源同步预缓存。你可以选择将预加载完成的LottieComposition对象存入全局变量,方便后续直接调用:
// 全局存储预加载的Lottie实例
LottieComposition? heartbeatLoadingComposition;

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 统一预缓存所有静态资源
  await Future.wait([
    // 原有SVG预缓存逻辑保留
    precachePicture(
      ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/svg/login.svg'),
      null,
    ),
    precachePicture(
      ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/svg/logo.svg'),
      null,
    ),
    precachePicture(
      ExactAssetPicture(SvgPicture.svgStringDecoder, 'assets/svg/signup_panel_1.svg'),
      null,
    ),
    // 新增Lottie动画预缓存
    LottieComposition.fromAsset('assets/lottie/heartbeat_loading.json')
        .then((value) => heartbeatLoadingComposition = value),
  ]);

  runApp(const MyApp());
}
  1. 修改Loading组件调用逻辑
    将原有Lottie.asset的异步加载方式,改为直接传入预加载完成的LottieComposition对象,做到渲染无延迟:
Widget _buildAnimation() {
  return Lottie(
    composition: heartbeatLoadingComposition,
    width: 300,
    repeat: true,
    animate: true,
  );
}

补充说明

Lottie内部自带资源缓存机制,如果你不想定义全局变量,只要提前调用过一次LottieComposition.fromAsset加载对应资源,后续再使用Lottie.asset加载同路径资源时也会自动命中缓存,无需额外修改组件代码。如果你的应用有单独的闪屏页,也可以将预缓存逻辑放在闪屏页的初始化阶段执行,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:09:03