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

如何预缓存SVG图标列表?使用flutter_svg遇预缓存问题求助

解决flutter_svg无预缓存功能的方案

flutter_svg本身确实没有内置的预缓存API,但可以通过以下两种方式实现SVG资源的预加载缓存:

方法一:内存缓存SVG字符串(推荐)

通过提前加载所有SVG资源的字符串内容并存入内存,后续直接使用字符串渲染SVG,避免重复读取本地文件。

1. 创建SVG缓存工具类

import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';

class SvgCache {
  static final Map<String, String> _svgCache = {};

  // 批量预缓存指定的SVG资源
  static Future<void> precacheAssets(List<String> assetPaths) async {
    for (final path in assetPaths) {
      if (!_svgCache.containsKey(path)) {
        final svgContent = await rootBundle.loadString(path);
        _svgCache[path] = svgContent;
      }
    }
  }

  // 从缓存获取并渲染SVG
  static SvgPicture getCachedSvg(
    String assetPath, {
    double? width,
    double? height,
    Color? color,
  }) {
    final svgContent = _svgCache[assetPath];
    if (svgContent != null) {
      return SvgPicture.string(
        svgContent,
        width: width,
        height: height,
        colorFilter: color != null ? ColorFilter.mode(color, BlendMode.srcIn) : null,
      );
    }
    // 缓存未命中时,降级为直接加载资源(避免崩溃)
    return SvgPicture.asset(
      assetPath,
      width: width,
      height: height,
      colorFilter: color != null ? ColorFilter.mode(color, BlendMode.srcIn) : null,
    );
  }
}

2. 在App启动时预缓存所有资源

在main函数中初始化时完成预加载:

import 'package:flutter/material.dart';

void main() async {
  // 确保Flutter绑定初始化完成
  WidgetsFlutterBinding.ensureInitialized();
  // 预缓存你定义的所有SVG资源
  await SvgCache.precacheAssets(Images.svgAssets);
  runApp(const MyApp());
}

3. 在UI中使用缓存的SVG

替换原来的SvgPicture.asset为缓存工具类的方法:

SvgCache.getCachedSvg(Images.MAIL_ICON, width: 24, height: 24, color: Colors.grey)

方法二:磁盘缓存(适合大量SVG资源场景)

如果你的App有大量SVG资源,担心内存占用过高,可以将SVG内容缓存到本地磁盘,下次启动时直接读取磁盘文件:

核心思路

  1. 使用path_provider获取应用的缓存目录
  2. 预加载SVG时,将字符串内容写入缓存目录的对应文件
  3. 渲染时优先读取磁盘缓存文件,不存在再从assets加载并写入缓存

注意:这种方式需要额外处理文件读写的异常,以及缓存过期逻辑,适合资源量较大的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:00:04