Flutter SVG图像处理插件jovial_svg的使用
Flutter SVG图像处理插件jovial_svg的使用
描述
jovial_svg
是一个强大的、高效的SVG静态图像渲染库,支持定义良好的SVG配置文件、高效的二进制存储格式和动画。通过使用二进制格式,加载预编译的二进制文件通常比解析XML SVG文件快一个数量级。对于较大的SVG文件,观察到的加载速度提高了5倍至20倍。
该库支持适用于静态图像的 SVG Tiny 1.2 和 SVG 1.1 的一部分。它还支持通过 <style>
标签内联CSS样式表。除了SVG,Android Vector Drawable 文件也被支持。提供的小部件用于显示这些可缩放的图像,并且可以通过DOM接口修改SVG资源以生成动画。
该库发布在 pub.dev,您也可以在那里找到 dartdocs。它被用于 JRPN 中的木星图标和 Jovial Aisleriot 中的卡片。
快速上手
显示SVG
一个简单的例子是将SVG解析为 ScalableImage
并在 ScalableImageWidget
中显示:
import 'package:flutter/material.dart';
import 'package:jovial_svg/jovial_svg.dart';
void main() {
runApp(MinimalSample());
}
///
/// 一个最小示例应用程序,使用 `jovial_svg`。这个例子让
/// [ScalableImageWidget] 处理所有异步工作,这在原型设计时是合理的。
///
class MinimalSample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SVG 最小示例',
home: ScalableImageWidget.fromSISource(
si: ScalableImageSource.fromSvgHttpUrl(
Uri.parse('https://jovial.com/images/jupiter.svg'))));
}
}
通常情况下,资源来自 AssetBundle
,但它们仍然需要异步加载。可以在构建UI之前预先加载它们,这是一个更好的选择——它可以节省重新渲染UI的时间,避免任何可能的闪烁。以下是如何在网络中预先加载的例子:
import 'package:flutter/material.dart';
import 'package:jovial_svg/jovial_svg.dart';
void main() async {
final si = await ScalableImage.fromSvgHttpUrl(
Uri.parse('https://jovial.com/images/jupiter.svg'));
runApp(AssetsPreLoaded(si));
}
///
/// 使用 `jovial_svg` 的示例应用程序。这个例子展示了如何在构建widget树之前完成异步部分,
/// 以避免屏幕上的变化。
///
class AssetsPreLoaded extends StatelessWidget {
final ScalableImage icon;
AssetsPreLoaded(this.icon);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SVG 最小示例', home: ScalableImageWidget(si: icon));
}
}
示例程序
要尝试该库,请参阅 示例程序。它主要用于桌面运行,但在其他平台上也能很好地运行。它允许你浏览一系列测试图像,包括从开源纸牌游戏(如Aisleriot)中获取的图像。该演示还允许你粘贴SVG资产的URL到程序中;然后它会加载并渲染它。
动画与交互性
通过让程序检测渲染的SVG资产中的鼠标点击,可以实现交互性。命名的SVG节点可以标记为导出,导出节点的名称和边界矩形提供给调用者。边界矩形可以与鼠标点击或触摸事件的位置进行比较,以确定给定点渲染了哪个节点。
提供的文档对象模型(DOM)API可用于编程方式修改SVG资产。使用它,Dart代码可以更改诸如颜色、线宽、字体等渲染属性。它还可以添加或删除表示资产的内存图中的节点。这些修改可以重复进行以实现动画效果。
有关动画和交互性的更多信息,请参阅 examples
目录下的 animation.dart
。
支持的SVG配置文件
大多数适用于静态SVG文档的SVG 1.1功能都得到支持,包括使用CSS(<style>
标签)指定SVG属性。具体支持的功能请参考原文档。
相关工作
关于Flutter和矢量图形的讨论,可以访问 https://flutter.dev/go/vector-graphics。它包括了一张针对不同用例的SVG替代品列表。特别是如果你正在创建自己的资产,其中的一个替代品可能值得考虑。
更多关于Flutter SVG图像处理插件jovial_svg的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter SVG图像处理插件jovial_svg的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用jovial_svg
插件来处理SVG图像的示例代码。jovial_svg
是一个用于在Flutter应用中渲染SVG图像的插件。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加jovial_svg
依赖:
dependencies:
flutter:
sdk: flutter
jovial_svg: ^0.14.3 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你需要使用SVG图像的文件中导入jovial_svg
插件:
import 'package:jovial_svg/jovial_svg.dart';
3. 使用jovial_svg渲染SVG图像
以下是一个完整的示例,展示如何在Flutter应用中加载并渲染一个SVG图像:
import 'package:flutter/material.dart';
import 'package:jovial_svg/jovial_svg.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('jovial_svg Example'),
),
body: Center(
child: SvgPicture.asset(
'assets/sample.svg', // 确保你的SVG文件在assets文件夹中
width: 200, // 设置宽度
height: 200, // 设置高度
color: Colors.blue, // 设置颜色
),
),
),
);
}
}
4. 确保SVG文件在assets中
在pubspec.yaml
文件中,你需要将SVG文件添加到assets
部分:
flutter:
assets:
- assets/sample.svg # 指向你的SVG文件
5. 完整项目结构
确保你的项目结构类似于以下:
your_flutter_project/
├── android/
├── ios/
├── assets/
│ └── sample.svg
├── lib/
│ └── main.dart
├── pubspec.yaml
└── ...
6. 运行应用
使用flutter run
命令运行你的应用,你应该能够在屏幕上看到一个渲染后的SVG图像。
注意事项
- 确保你的SVG文件是有效的,并且路径正确。
jovial_svg
支持多种SVG特性,但可能并不支持所有SVG特性。如果遇到问题,请查阅官方文档或提交问题。- 可以通过
SvgPicture.string
方法从字符串加载SVG内容,而不仅仅是文件。
这样,你就可以在Flutter项目中使用jovial_svg
插件来处理和渲染SVG图像了。