Flutter SVG图片缓存加载插件cached_network_svg_image的使用
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
更多关于Flutter SVG图片缓存加载插件cached_network_svg_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用cached_network_svg_image
插件来加载和缓存SVG图片的示例代码。这个插件结合了cached_network_image
和flutter_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,
),
),
);
}
}
在这个示例中:
CachedNetworkSvgImage
是主要的组件,用于从网络加载并缓存SVG图片。svgUrl
是你要加载的SVG图片的URL。placeholder
是一个在图片加载时显示的占位符,这里是一个CircularProgressIndicator
。errorWidget
是一个在图片加载失败时显示的错误组件,这里是一个显示错误的图标。width
和height
是可选参数,用于指定图片的宽度和高度。
这样,当你运行这个应用时,它会尝试从指定的URL加载SVG图片,并在加载期间显示一个进度指示器。如果加载失败,它会显示一个错误图标。图片一旦加载成功,它会被缓存到本地,这样下次加载时就会更快。
希望这个示例能帮助你理解如何在Flutter项目中使用cached_network_svg_image
插件。