Flutter动画矢量图生成插件animated_vector_gen的使用

Flutter动画矢量图生成插件animated_vector_gen的使用

animated_vector_gen简介

animated_vector_gen 是一个用于生成动画矢量图的代码生成器。它支持将通过 ShapeShifter 创建的动画矢量数据转换为 Flutter 可用的格式。


使用步骤

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
    # 主包依赖
    animated_vector:
    # 注解包,用于标记 ShapeShifter 文件
    animated_vector_annotations:

dev_dependencies:
    # 代码生成工具
    animated_vector_gen:
    # 自动运行构建工具
    build_runner:

运行以下命令以安装依赖:

flutter pub get

2. 启动代码生成器

有以下两种方式启动代码生成器:

  • 手动运行: 每次修改文件后,运行以下命令以生成代码:

    dart run build_runner build
    
  • 自动监听模式: 启动一个持久化进程,当文件保存时会自动重新生成代码:

    dart run build_runner watch
    

使用方法

1. 将 ShapeShifter 文件放入指定目录

.shapeshifter 文件放入符合 Dart 包布局规范的文件夹中,推荐的文件夹包括 assets/ 或其子目录。

例如,将文件放在 assets/ 目录下:

assets/
  ├── iconA.shapeshifter
  └── iconB.shapeshifter

ShapeShifter 文件可以通过 ShapeShifter 工具创建并保存。


2. 使用 @ShapeShifterAsset 注解

在 Dart 文件中使用 @ShapeShifterAsset 注解来引用 ShapeShifter 文件,并生成对应的常量变量。

示例代码:

// vectors.dart
import 'package:animated_vector_annotations/animated_vector_annotations.dart';

part 'vectors.g.dart'; // 自动生成的文件

@ShapeShifterAsset("assets/iconA.shapeshifter")
const iconA = _$iconA;

class Vectors {
    @ShapeShifterAsset("assets/iconB.shapeshifter")
    static const playPause = _$playPause; // 字段名可以与文件名不同,但生成的变量名始终由字段名派生。
}

3. 自动生成代码

运行代码生成器后,会在 vectors.g.dart 文件中生成对应的动画矢量数据。

生成后的代码示例:

// vectors.g.dart
part of 'vectors.dart';

const AnimatedVectorData _$iconA = AnimatedVectorData(
  // 具体的动画矢量数据
  ...
);

const AnimatedVectorData _$playPause = AnimatedVectorData(
  // 具体的动画矢量数据
  ...
);

完整示例

以下是一个完整的示例,展示如何使用 animated_vector_gen 插件生成动画矢量图。

1. 创建 ShapeShifter 文件

使用 ShapeShifter 创建两个动画矢量文件 iconA.shapeshiftericonB.shapeshifter,并将它们保存到 assets/ 目录下。

2. 编写 Dart 代码

创建 vectors.dart 文件:

// vectors.dart
import 'package:animated_vector_annotations/animated_vector_annotations.dart';

part 'vectors.g.dart'; // 自动生成的文件

@ShapeShifterAsset("assets/iconA.shapeshifter")
const iconA = _$iconA;

class Vectors {
    @ShapeShifterAsset("assets/iconB.shapeshifter")
    static const playPause = _$playPause;
}

运行代码生成器:

dart run build_runner build

生成后的 vectors.g.dart 文件内容如下:

// vectors.g.dart
part of 'vectors.dart';

const AnimatedVectorData _$iconA = AnimatedVectorData(
  // 具体的动画矢量数据
  ...
);

const AnimatedVectorData _$playPause = AnimatedVectorData(
  // 具体的动画矢量数据
  ...
);

3. 在 Flutter 中使用

在 Flutter 的 Widget 中使用生成的动画矢量数据:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Animated Vector Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(iconA, size: 100), // 使用 iconA
              SizedBox(height: 20),
              Icon(Vectors.playPause, size: 100), // 使用 playPause
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter动画矢量图生成插件animated_vector_gen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


animated_vector_gen 是一个用于 Flutter 的插件,它可以帮助你生成动画矢量图(Animated Vector Drawable, AVD)。这个插件的主要目的是简化在 Flutter 中使用 Android 的 Animated Vector Drawable 的过程。通过这个插件,你可以将 Android 的 AVD 转换为 Flutter 中的动画。

安装 animated_vector_gen

首先,你需要在 pubspec.yaml 文件中添加 animated_vector_gen 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  animated_vector_gen: ^1.0.0  # 请使用最新版本

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

使用 animated_vector_gen

  1. 准备 AVD 文件
    你需要有一个 Android 的 Animated Vector Drawable 文件(通常是 .xml 文件)。这个文件定义了矢量图和动画。

  2. 生成 Flutter 动画代码
    使用 animated_vector_gen 插件生成 Flutter 动画代码。你可以通过命令行工具来生成代码:

    flutter pub run animated_vector_gen -i path/to/your/avd.xml -o path/to/output/directory
    

    其中:

    • -i 指定输入的 AVD 文件路径。
    • -o 指定输出的目录路径。

    这个命令会生成一个 Dart 文件,其中包含了 Flutter 动画的代码。

  3. 在 Flutter 中使用生成的动画
    生成的 Dart 文件会包含一个 AnimatedVector 类,你可以在 Flutter 中使用这个类来显示动画。

    例如:

    import 'package:flutter/material.dart';
    import 'path/to/generated/animated_vector.dart';
    
    class MyAnimatedWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Animated Vector Example'),
          ),
          body: Center(
            child: AnimatedVector(
              size: Size(100, 100),
              onPressed: () {
                // 处理点击事件
              },
            ),
          ),
        );
      }
    }
    
    void main() => runApp(MaterialApp(
      home: MyAnimatedWidget(),
    ));
回到顶部