Flutter SVG图像处理插件jaspr_svg的使用

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

Flutter SVG图像处理插件jaspr_svg的使用

JASPR SVG

style: very_good_analysis Powered by Mason License: BSD 3-Clause

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,  // 设置颜色
);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!