Flutter SVG图片缓存加载插件cached_network_svg_image的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter SVG图片缓存加载插件 cached_network_svg_image 的使用

cached_network_svg_image 是一个 Flutter 插件,允许你轻松地从网络加载并缓存 SVG 图片。它提供了一种简单且高效的方式来显示带有缓存、占位符和错误处理的 SVG 图片。🌐🖼️

特性 ✨

  • 从网络加载 SVG 图片。🌍
  • 缓存图片以便离线使用。📦
  • 在图片加载时显示占位符。⏳
  • 如果图片加载失败,显示错误小部件。❌
  • 自定义图片淡入动画的持续时间。⏱️

安装 🛠️

在你的 pubspec.yaml 文件中添加以下内容:

dependencies:
  cached_network_svg_image: any

然后运行 flutter pub get 来安装插件。🚀

使用 📖

在你的 Dart 文件中导入插件:

import 'package:cached_network_svg_image/cached_network_svg_image.dart';

使用 CachedNetworkSVGImage 小部件来显示从网络加载的 SVG 图片:

CachedNetworkSVGImage(
  imageUrl: 'https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg',
  placeholder: const CircularProgressIndicator(color: Colors.green),
  errorWidget: const Icon(Icons.error, color: Colors.red),
  width: 250.0,
  height: 250.0,
  fadeDuration: const Duration(milliseconds: 500),
)

参数 📋

  • imageUrl: SVG 图片的 URL。🌐
  • cacheKey: 用于图片的自定义缓存键。🔑
  • placeholder: 在图片加载时显示的小部件。⏳
  • errorWidget: 如果图片加载失败,显示的小部件。❌
  • width: 图片的宽度。📏
  • height: 图片的高度。📏
  • fadeDuration: 图片加载时淡入动画的持续时间。⏱️
  • headers: 传递给网络请求的头部信息。🗂️
  • cacheManager: 用于缓存图片的自定义缓存管理器,默认为 DefaultCacheManager()。📦
  • fit: 图片如何适应分配的空间。🔲
  • alignment: 图片在其边界内的对齐方式。📐
  • matchTextDirection: 是否按 TextDirection 绘制图片。↔️
  • allowDrawingOutsideViewBox: 是否允许图片绘制超出其视图框。📏
  • color: 应用到图片的颜色。🎨
  • colorBlendMode: 应用到图片颜色的混合模式。🎨
  • semanticsLabel: 用于辅助工具的图片描述。🏷️
  • excludeFromSemantics: 是否将图片排除在语义之外。🚫
  • colorFilter: 应用到图片的颜色滤镜。🎨
  • placeholderBuilder: 创建占位符小部件的构建函数。🛠️
  • theme: 应用到图片的主题。🎨

函数 🔧

  • preCache: 预缓存图片的函数。📦
  • clearCacheForUrl: 清除特定 URL 的缓存的函数。🗑️
  • clearCache: 清除整个缓存的函数。🗑️

示例 💡

以下是一个完整的示例,展示了如何使用 cached_network_svg_image 插件:

import 'package:flutter/material.dart';
import 'package:cached_network_svg_image/cached_network_svg_image.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cached Network SVG Image Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const _imagesUrlList = [
    'https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg',
    'https://upload.wikimedia.org/wikipedia/commons/7/71/Epsilon_letter%2C_Mega_Etymologikon%2C_1499.svg',
    'https://upload.wikimedia.org/wikipedia/commons/0/0a/Python.svg',
    'https://upload.wikimedia.org/wikipedia/commons/3/3f/Git_icon.svg',
    'https://upload.wikimedia.org/wikipedia/commons/9/96/Sass_Logo_Color.svg',
    'https://upload.wikimedia.org/wikipedia/commons/2/27/PHP-logo.svg',
    'https://upload.wikimedia.org/wikipedia/commons/5/57/Delta_letter%2C_Mega_Etymologikon%2C_1499.svg',
    'https://upload.wikimedia.org/wikipedia/commons/9/91/Electron_Software_Framework_Logo.svg',
    'https://upload.wikimedia.org/wikipedia/commons/e/e2/202009_Allosaurus_fragilis.svg',
    'https://upload.wikimedia.org/wikipedia/commons/6/61/HTML5_logo_and_wordmark.svg',
    'https://upload.wikimedia.org/wikipedia/commons/d/d5/CSS3_logo_and_wordmark.svg',
    'https://upload.wikimedia.org/wikipedia/commons/7/73/Ruby_logo.svg',
    'https://upload.wikimedia.org/wikipedia/commons/3/34/202101_Zebrafish.svg',
    'https://upload.wikimedia.org/wikipedia/commons/1/18/ISO_C%2B%2B_Logo.svg',
    'https://upload.wikimedia.org/wikipedia/commons/b/bb/Lamda_letter%2C_Mega_Etymologikon%2C_1499.svg',
  ];

  int _selectedIndex = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Cached Network SVG Image Demo'),
      ),
      body: Center(
        child: CachedNetworkSVGImage(
          _imagesUrlList[_selectedIndex],
          placeholder: const CircularProgressIndicator(color: Colors.green),
          errorWidget: const Icon(Icons.error, color: Colors.red),
          width: 250.0,
          height: 250.0,
          fadeDuration: const Duration(milliseconds: 700),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _nextImage,
        tooltip: 'Next',
        child: const Icon(Icons.navigate_next),
      ),
    );
  }

  void _nextImage() => setState(() {
        _selectedIndex = (_selectedIndex + 1) % _imagesUrlList.length;
      });
}

许可证 📄

该项目采用 MIT 许可证。详见 LICENSE 文件。


更多关于Flutter SVG图片缓存加载插件cached_network_svg_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter SVG图片缓存加载插件cached_network_svg_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用cached_network_svg_image插件来加载和缓存SVG图片的示例代码。这个插件结合了cached_network_imageflutter_svg的功能,允许你从网络加载SVG图片并缓存它们。

首先,确保你的pubspec.yaml文件中已经添加了以下依赖:

dependencies:
  flutter:
    sdk: flutter
  cached_network_svg_image: ^x.y.z  # 请替换为最新版本号
  flutter_svg: ^x.y.z  # 请确保flutter_svg也是最新版本

然后运行flutter pub get来安装这些依赖。

接下来,在你的Dart代码中,你可以这样使用CachedNetworkSvgImage组件:

import 'package:flutter/material.dart';
import 'package:cached_network_svg_image/cached_network_svg_image.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cached Network SVG Image Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final String svgUrl = 'https://example.com/path/to/your/image.svg';

    return Scaffold(
      appBar: AppBar(
        title: Text('Cached Network SVG Image Demo'),
      ),
      body: Center(
        child: CachedNetworkSvgImage(
          svgUrl,
          placeholder: (context, url) => CircularProgressIndicator(),
          errorWidget: (context, url, error) => Icon(Icons.error),
          width: 200,
          height: 200,
        ),
      ),
    );
  }
}

在这个示例中:

  1. CachedNetworkSvgImage 是主要的组件,用于从网络加载并缓存SVG图片。
  2. svgUrl 是你要加载的SVG图片的URL。
  3. placeholder 是一个在图片加载时显示的占位符,这里是一个CircularProgressIndicator
  4. errorWidget 是一个在图片加载失败时显示的错误组件,这里是一个显示错误的图标。
  5. widthheight 是可选参数,用于指定图片的宽度和高度。

这样,当你运行这个应用时,它会尝试从指定的URL加载SVG图片,并在加载期间显示一个进度指示器。如果加载失败,它会显示一个错误图标。图片一旦加载成功,它会被缓存到本地,这样下次加载时就会更快。

希望这个示例能帮助你理解如何在Flutter项目中使用cached_network_svg_image插件。

回到顶部