Flutter SVG图像处理插件jaspr_svg的使用
Flutter SVG图像处理插件jaspr_svg的使用
JASPR SVG
SVG for Jaspr – 来自资源文件和数据URL
安装 💻
⚠️ 为了开始使用Jaspr Svg,必须在您的机器上安装Dart SDK。
通过以下命令安装:
dart pub add jaspr_svg
使用
以下是一个完整的示例,展示如何在Jaspr项目中使用jaspr_svg
插件加载SVG图像。
import 'package:jaspr/jaspr.dart';
import 'package:jaspr_svg/jaspr_svg.dart';
// 使用 @client 注解标记的组件将在客户端自动编译为JavaScript,并挂载到客户端。
// 因此:
// - 此文件及其导入的任何文件都必须同时适用于服务器和客户端环境。
// - 此组件及其所有子组件将在服务器端预渲染期间构建一次,然后在客户端正常渲染期间再次构建。
@client
class About extends StatelessComponent {
const About({super.key});
@override
Iterable<Component> build(BuildContext context) sync* {
yield section([
ol([
li([
h3([
// 从资源文件加载SVG
svgAsset('web/images/material-symbols--book.svg'),
text(' 文档')
]),
text('Jaspr的 '),
a(
href: 'https://docs.page/schultek/jaspr',
[text('官方文档')]),
text(' 提供了您需要的所有信息来开始使用。'),
]),
li([
h3([
// 从数据URI加载SVG
svgDataUri(
'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLW1lc3NhZ2Utc3F1YXJlLW1vcmUiPjxwYXRoIGQ9Ik0yMSAxNWEyIDIgMCAwIDEtMiAySDdsLTQgNFY5YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnoiLz48cGF0aCBkPSJNOCAxMGguMDEiLz48cGF0aCBkPSJNMTIgMTBoLjAxIi8+PHBhdGggZD0iTTE2IDEwaC4wMSIvPjwvc3ZnPg=='),
text(' 社区')
]),
text('遇到问题?请在官方 '),
a(href: 'https://docs.page/schultek/jaspr', [text('Discord服务器')]),
text(' 上提问Jaspr社区。'),
]),
li([
h3([
// 从字符串加载SVG
svgRaw(
'<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m7 16.5l-5-3l5-3l5 3V19l-5 3z"/><path d="M2 13.5V19l5 3m0-5.455l5-3.03m5 2.985l-5-3l5-3l5 3V19l-5 3zM12 19l5 3m0-5.5l5-3m-10 0V8L7 5l5-3l5 3v5.5M7 5.03v5.455M12 8l5-3"/></g></svg>'),
text(' 生态系统')
]),
text(
'获取项目所需的官方包和集成,如jaspr_router、jaspr_tailwind或jaspr_riverpod。在pub.dev上搜索带有 '),
a(href: 'https://pub.dev/packages?q=topic%3Ajaspr', [text('#jaspr')]),
text(' 标签的包,或者发布您自己的包。'),
]),
li([
h3([
// 从数据URI加载SVG
svgDataUri(
'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+PHBhdGggZmlsbD0iIzE5NzZkMiIgZD0iTTkzLjk5IDguOTdjLTIxLjkxIDAtMjkuOTYgMjIuMzktMjkuOTYgMjIuMzlzLTcuOTQtMjkuMzktMzAtMjkuMzljLTE2LjU4IDAtMzUuNDggMTMuMTQtMjguNSA0My4wMXM1OC41NiA2Ny4wOCA1OC41NiA2Ny4wOHM5MS4zOS0zNy4yMSA1OC4zOC02Ny4wOGM2Ljk4LTI5Ljg3LTEwLjU2LTQzLjAxLTI4LjQ4LTQzLjAxIi8+PHBhdGggZmlsbD0iIzBkNDdhMSIgZD0iTTMwLjY1IDExLjJjMTcuMiAwIDI1Ljc0IDE4LjQ5IDI4LjUgMjUuOThjLjM5IDEuMDcgMS44OCAxLjEgMi4zMy4wNkw2NCAzMS4zNUM2MC40NSAyMC4wMSA1MC42OSA4Ljk3IDM0LjMsOC45N2MtNi45IDAtMTQuMTkgMi4yOC0xOS44NiA3LjA5YzUuMDksMy4yOSwxMC44Ny00Ljg2IDE2LjQ4LTQuODZsNjMuMzQsMi4yN2MtNS4yOSAwLTkuNzcsMS41NC0xMy41MywzLjg1YzIuNjQtMS4wMiA1LjU2LTEuNjIsOC44LTEuNjIsYzE2LjIsIDAsMzAuNzIsMTIuMjgsMjQuMTcsNDQuN2MtNS42MiAyNC4zOS0zOC40NiA1My45OC00OC40OSA2NS4yN2MtLjY0LjcsLjg2IDEuODgsLjg2IDEuODgsYzE2LjEsIDAsMzAuNzIsMTIuMjgsMjQuMTcsNDQuN2MtNi45IDAsMTQuMTksMi4yOCwxOS44NiA3LjA5YzUuMDksMy4yOSwxMC44Ny00Ljg2IDE2LjQ4LTQuODZsNjMuMzQsMi4yN2MtNS4yOSAwLTkuNzcsMS41NCwxMy41MywzLjg1czUuMjksMTcuMjksMTMuNTcsMjQuNjEsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNGMxLjEsMy4wMiwyLjcysNTkuOTQsNC41OCw4LjU0YzUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFtNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNGMxLjEsMy4wMiwyLjcysNTkuOTQsNC41OCw4LjU0YzUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMxLjc2IDAsMy0xLjcstMi4zNiwzLjM0YzEuMTksMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNGMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNC41OCw4LjU0czUuMjksMy4yOSwxMC44NywyLjc4LDE2LjQ4LDkuNjMsYzcuMTUsMy4wNCwzLjQ5LDMuMTgsOS45NSw1LjQ2czUuMjgsMTcuMjksMTMuNTcsMjQuNjIsMzMuMzgsMjQuNjFsNjAuMTIsOS44NGMtMS43NiAwLTMtMS43LTIuMzYtMy4zNWMxLjEsMy4wMiwyLjc5LDUuOTQsNCu'),
text(' 支持Jaspr')
]),
text('如果您喜欢Jaspr,请在 '),
a(href: 'https://github.com/schultek/jaspr', [text('GitHub')]),
text(' 上给我们点赞并告诉您的朋友。'),
]),
]),
]);
}
@css
static final styles = [
css('ol').box(maxWidth: 500.px),
];
}
</code></pre>
---
#### 持续集成 🤖
Jaspr Svg 配备了一个内置的 GitHub Actions 工作流,由 Very Good Workflows 提供支持。但您也可以添加自己的CI/CD解决方案。
默认情况下,在每次拉取请求和推送时,CI会格式化、检查代码风格并运行测试。这确保了代码的一致性并使其在添加功能或进行更改时行为正确。该项目使用 Very Good Analysis 进行严格的分析选项设置。代码覆盖率使用 Very Good Workflows 进行强制执行。
---
#### 运行测试 🧪
要运行所有单元测试:
```bash
dart pub global activate coverage 1.2.0
dart test --coverage=coverage
dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info
要查看生成的覆盖率报告,可以使用 lcov。
# 生成覆盖率报告
genhtml coverage/lcov.info -o coverage/
# 打开覆盖率报告
open coverage/index.html
更多关于Flutter SVG图像处理插件jaspr_svg的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter SVG图像处理插件jaspr_svg的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
jaspr_svg
是一个用于在 Flutter 中处理 SVG 图像的插件。它允许你在 Flutter 应用中加载、渲染和操作 SVG 图像。以下是如何使用 jaspr_svg
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 jaspr_svg
插件的依赖:
dependencies:
flutter:
sdk: flutter
jaspr_svg: ^0.1.0 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入包
在你的 Dart 文件中导入 jaspr_svg
包:
import 'package:jaspr_svg/jaspr_svg.dart';
3. 加载和显示 SVG 图像
你可以使用 SvgPicture
小部件来加载和显示 SVG 图像。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:jaspr_svg/jaspr_svg.dart';
class MySvgWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SVG Example'),
),
body: Center(
child: SvgPicture.asset(
'assets/images/my_image.svg', // SVG 文件路径
width: 100, // 可选:设置宽度
height: 100, // 可选:设置高度
),
),
);
}
}
4. 从网络加载 SVG 图像
你也可以从网络加载 SVG 图像:
SvgPicture.network(
'https://example.com/my_image.svg', // SVG 文件的 URL
width: 100,
height: 100,
);
5. 自定义 SVG 颜色
你可以使用 color
参数来改变 SVG 图像的颜色:
SvgPicture.asset(
'assets/images/my_image.svg',
color: Colors.blue, // 设置颜色
);