Flutter头像生成插件flutter_avataaar的使用

Flutter头像生成插件flutter_avataaar的使用

flutter_avataaar 是一个用于在 Flutter 应用程序中生成 Avataaars 头像的插件。Avataaars 是一个免费的在线头像生成器,任何人都可以轻松创建自己的漂亮个人头像。

flutter-avataaar

开始使用

1. 创建 Avataaar 对象

// 使用默认构造函数创建头像
Avataaar(
  skin: Skin.pale,
  top: Top(
    topType: TopType.longHairCurvy,
    accessoriesType: AccessoriesType.Round,
    facialHair: FacialHair.beardMagestic(
      facialHairColor: FacialHairColor.BlondeGolden,
    ),
  ),
);

// 随机化所有属性
Avataaar.random();

// 或者混合两者
Avataaar.random(
  skin: Skin.pale,
  top: Top(
    topType: TopType.longHairCurvy,
    accessoriesType: AccessoriesType.Round,
    facialHair: FacialHair.random,
  ),
);

2. 创建 AvataaarGenerator 小部件并传递头像

AvataaarGenerator(
  avataaar: avataaar,
  onTranslateKey: (String key) {
    return Translate.get(key);
  },
  onUpdateAvataaar: () {setState(() {});},
);

// 默认情况下,包将使用 SvgPicture 渲染图像。您可以使用 AvataaarPicture 来创建自定义
// [builder] 构造函数,并为给定的图像 URL 创建小部件:
AvataaarPicture.builder(
  builder: (context, avataaar) {
    // 自定义逻辑
  },
)

保存头像

使用 Avataaar.toJson()Avataaar.fromJson(String) 方法来序列化和反序列化头像。

// 序列化
final json = _avatar.toJson();

// 反序列化
final avatar = Avataaar.fromJson(json);

获取图像字节

使用 Avataaar 类中的 getPngFromSvg 函数获取 PNG 文件。

final file = await _avatar.getPngFromSvg();

完整示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_avataaar 插件生成和保存头像。

import 'package:example/assets_loader.dart';
import 'package:flutter/material.dart';
import 'package:flutter_avataaar/flutter_avataaar.dart';

void main() => runApp(const AvataaarExample());

class AvataaarExample extends StatefulWidget {
  const AvataaarExample({Key? key}) : super(key: key);

  [@override](/user/override)
  State<AvataaarExample> createState() => _AvataaarExampleState();
}

class _AvataaarExampleState extends State<AvataaarExample> {
  final String baseUrl = 'https://avataaars.io';
  late Avataaar _avatar;

  [@override](/user/override)
  void initState() {
    super.initState();
    _avatar = Avataaar.random(baseUrl: baseUrl);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SafeArea(
        child: Scaffold(
          appBar: AppBar(title: const Text('Avataaars'), centerTitle: true),
          body: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              children: [
                Expanded(
                  child: FutureBuilder<Map<String, dynamic>>(
                    future: AssetsLoader().load(),
                    builder: (context, snapshot) {
                      if (snapshot.hasData) {
                        var data = snapshot.data!;
                        return AvataaarGenerator(
                          avataaar: _avatar,
                          onUpdateAvataaar: () => setState(() {}),
                          onTranslateKey: (p0) {
                            return data[p0] ?? 'unknown';
                          },
                        );
                      } else {
                        return CircularProgressIndicator();
                      }
                    },
                  ),
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    IconButton(
                      iconSize: 48.0,
                      icon: const Icon(Icons.refresh),
                      onPressed: () => setState(() => _avatar = Avataaar.random(baseUrl: baseUrl)),
                    ),
                    Builder(
                      builder: (_) {
                        return ElevatedButton(
                          onPressed: () async {
                            try {
                              final file = await _avatar.getPngFromSvg();
                              ScaffoldMessenger.of(_).showSnackBar(
                                SnackBar(
                                  content: Text(file.path),
                                  behavior: SnackBarBehavior.floating,
                                ),
                              );
                            } on Exception catch (e) {
                              ScaffoldMessenger.of(_).showSnackBar(
                                SnackBar(
                                  content: Text(e.toString()),
                                  behavior: SnackBarBehavior.floating,
                                ),
                              );
                            }
                          },
                          child: Text('保存图标'),
                        );
                      },
                    )
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter头像生成插件flutter_avataaar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter头像生成插件flutter_avataaar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_avataaar 是一个用于在 Flutter 应用中生成头像的插件。它允许你通过简单的配置生成个性化的头像。以下是如何使用 flutter_avataaar 插件的详细步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_avataaar: ^0.0.3  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 flutter_avataaar 包:

import 'package:flutter_avataaar/flutter_avataaar.dart';

3. 使用 Avataaar 组件

Avataaar 组件是 flutter_avataaar 插件的主要部件。你可以通过配置不同的属性来生成个性化的头像。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Avataaar Example'),
        ),
        body: Center(
          child: Avataaar(
            style: AvataaarStyle(
              backgroundColor: Colors.blue,
              top: Clothes.collar_sweater,
              accessoriesType: AccessoriesType.blank,
              hatColor: Color(0xff000000),
              facialHair: FacialHair.beardMedium,
              facialHairColor: Color(0xff000000),
              clotheColor: Color(0xff000000),
              eyeType: EyeType.defaultType,
              eyebrowType: EyebrowType.defaultType,
              mouthType: MouthType.defaultType,
              skinColor: Color(0xff000000),
            ),
            size: 200.0,
          ),
        ),
      ),
    );
  }
}

4. 配置属性

Avataaar 组件的 style 属性允许你配置头像的各个部分,例如:

  • backgroundColor: 背景颜色
  • top: 头部装饰,如帽子、发型等
  • accessoriesType: 配饰类型
  • hatColor: 帽子颜色
  • facialHair: 面部毛发(如胡须)
  • facialHairColor: 面部毛发颜色
  • clotheColor: 衣服颜色
  • eyeType: 眼睛类型
  • eyebrowType: 眉毛类型
  • mouthType: 嘴巴类型
  • skinColor: 皮肤颜色

5. 调整大小

你可以通过 size 属性来调整头像的大小:

Avataaar(
  style: AvataaarStyle(
    // 配置各种属性
  ),
  size: 150.0,  // 设置头像大小
);
回到顶部