Flutter矢量图形渲染插件thorvg的使用

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

Flutter矢量图形渲染插件thorvg的使用

该包为Flutter提供了ThorVG运行时,并通过原生API支持高效的Lottie动画。

当前支持的功能

目前,此包仅支持Lottie动画功能。

支持的平台

平台 架构
Android arm64-v8a, armeabi-v7a, x86_64
iOS arm64, x86_64, x86_64(simulator)

使用方法

Lottie

Lottie实现旨在保持与lottie-flutter相同的接口。如果您当前正在使用它,只需将导入语句替换为import 'package:thorvg/thorvg.dart'即可利用代码。

import 'package:thorvg/thorvg.dart';
// ...
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [
            // 从资源加载Lottie动画
            Lottie.asset('assets/lottie/dancing_star.json'),

            // 从URL加载Lottie动画
            Lottie.network(
              'https://lottie.host/6d7dd6e2-ab92-4e98-826a-2f8430768886/NGnHQ6brWA.json'
            ),
          ],
        ),
      ),
    );
  }
}

生成Flutter绑定

如果您更改了以下文件中的绑定接口:

  • tvgFlutterLottieAnimation.h
  • tvgFlutterLottieAnimation.cpp

必须始终运行以下脚本:

# 第一次运行
flutter pub get
# 使用ffigen生成绑定
flutter pub run ffigen --config ffigen.yaml

您将会得到./lib/src/thorvg_bindings_generated.dart

构建

.gitmodules文件中指定ThorVG版本。

[submodule "thorvg"]
  path = thorvg
  url = git@github.com:thorvg/thorvg.git
  branch = v0.14.x # 更改为所需的版本

然后可以运行以下命令以与该版本对齐后进行构建。

git submodule init
git submodule update --remote

Android

Android构建需要NDK(LTS),请指定以下构建系统信息。

# 为动画(Lottie)构建
cd lottie
sh flutter_build.android.sh $NDK $HOST_TAG $API

检查是否生成了以下文件:

  • android/src/main/arm64-v8a/libthorvg.so
  • android/src/main/armeabi-v7a/libthorvg.so
  • android/src/main/x86_64/libthorvg.so

iOS

# 为动画(Lottie)构建
cd lottie
sh flutter_build.ios.sh

检查是否生成了以下文件:

  • ios/Frameworks/libthorvg.dylib

示例代码

以下是使用ThorVG插件的示例代码:

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    const textStyle = TextStyle(fontSize: 24);
    const spacerSmall = SizedBox(height: 10);

    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          title: const Text('ThorVG Flutter'),
        ),
        body: SingleChildScrollView(
          child: Container(
            margin: const EdgeInsets.only(top: 100),
            padding: const EdgeInsets.all(10),
            child: Column(
              children: [
                Lottie.network(
                  'https://lottie.host/6d7dd6e2-ab92-4e98-826a-2f8430768886/NGnHQ6brWA.json',
                  width: 300,
                  height: 300,
                ),
                const Text(
                  'Lottie动画由ThorVG驱动的原生API运行。',
                  style: textStyle,
                  textAlign: TextAlign.center,
                ),
                spacerSmall,
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter矢量图形渲染插件thorvg的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter矢量图形渲染插件thorvg的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,使用ThorVG插件进行矢量图形渲染是一项强大的功能,它允许开发者在应用中高效地渲染和处理矢量图形。以下是一个简单的示例,展示如何在Flutter项目中使用ThorVG插件进行矢量图形渲染。

首先,确保你的Flutter环境已经正确配置,并且你的项目已经创建。然后,你需要添加ThorVG插件到你的pubspec.yaml文件中。由于ThorVG可能不是一个官方发布的Flutter插件(具体取决于ThorVG对Flutter的支持情况),这里假设有一个社区维护的插件或者你需要通过平台通道与原生代码交互。以下是一个假设性的步骤和代码示例。

1. 添加依赖(假设存在ThorVG Flutter插件)

pubspec.yaml中添加依赖(如果存在的话):

dependencies:
  flutter:
    sdk: flutter
  thorvg_flutter: ^x.y.z  # 假设的版本号

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

2. 使用ThorVG渲染矢量图形

以下是一个示例代码,展示如何在Flutter中使用ThorVG渲染一个简单的矢量图形(如SVG)。注意,这个示例是基于假设的插件接口,实际使用时可能需要根据插件的具体API进行调整。

import 'package:flutter/material.dart';
import 'package:thorvg_flutter/thorvg_flutter.dart'; // 假设的导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ThorVG Flutter Example'),
        ),
        body: Center(
          child: ThorVGWidget(
            svgData: '''
              <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
                <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
              </svg>
            ''',
          ),
        ),
      ),
    );
  }
}

class ThorVGWidget extends StatelessWidget {
  final String svgData;

  ThorVGWidget({required this.svgData});

  @override
  Widget build(BuildContext context) {
    // 假设ThorVGWidget有一个方法可以接受SVG数据并渲染它
    // 这里的代码是基于假设的API,实际使用时请参考插件文档
    return Container(
      child: NativeThorVGView(
        svgData: svgData,
      ),
    );
  }
}

// 假设的NativeThorVGView是一个平台视图,用于在Flutter中嵌入原生ThorVG渲染
class NativeThorVGView extends StatefulWidget {
  final String svgData;

  NativeThorVGView({required this.svgData});

  @override
  _NativeThorVGViewState createState() => _NativeThorVGViewState();
}

class _NativeThorVGViewState extends State<NativeThorVGView> {
  @override
  Widget build(BuildContext context) {
    if (defaultTargetPlatform == TargetPlatform.android) {
      return AndroidView(
        viewType: 'thorvg/view', // 与原生代码中的ViewFactory对应
        creationParams: <String, dynamic>{
          'svgData': widget.svgData,
        },
        creationParamsCodec: const StandardMessageCodec(),
      );
    } else if (defaultTargetPlatform == TargetPlatform.iOS) {
      return UiKitView(
        viewType: 'thorvg/view', // 与原生代码中的ViewFactory对应
        creationParams: <String, dynamic>{
          'svgData': widget.svgData,
        },
        creationParamsCodec: const StandardMessageCodec(),
      );
    }
    return Text('Platform not supported');
  }
}

3. 原生代码集成(Android和iOS)

由于Flutter中的矢量图形渲染通常依赖于原生平台(Android和iOS)的实现,你需要在原生代码中集成ThorVG库,并创建一个平台视图来渲染SVG数据。这部分通常涉及以下步骤:

  • Android: 创建一个PlatformView子类,并在其中初始化ThorVG视图。
  • iOS: 使用UIKitViewMetalView等,并在Swift/Objective-C代码中初始化ThorVG视图。

由于这部分代码涉及大量的原生开发细节,这里不再展开。你可以参考Flutter官方文档中关于平台视图的部分,以及ThorVG的官方文档来了解如何在原生平台上集成和使用ThorVG。

结论

以上示例展示了如何在Flutter中假设性地使用ThorVG插件进行矢量图形渲染。实际使用时,你需要根据ThorVG Flutter插件的具体API和文档进行调整。如果ThorVG没有官方的Flutter插件,你可能需要通过平台通道与原生代码进行交互,以实现矢量图形的渲染。

回到顶部