Flutter随机抽象头像生成插件random_abstract_avatar的使用

Flutter随机抽象头像生成插件random_abstract_avatar的使用

plugin version likes pub points popularity

Randomly Generated Abstract Avatars

生成独特的抽象用户头像

特性

  • 高度可定制化:允许自定义颜色和装饰
  • ♻️ 混合匹配:可以选择用于生成的几何形状
  • ✔️ 离线使用:由于不使用外部服务(如Gravatar),因此在无网络连接的情况下也可以正常工作
  • 🚀 快速生成:借助hashlib和dart UI画布,头像图像可以即时生成

开始使用

包含在项目中

import 'package:random_abstract_avatar/random_abstract_avatar.dart';

基本组件

Avatar(source: 'test')

基本示例

class _TestAppState extends State<TestApp> {
  final _controller = TextEditingController(text: 'flutter!');

  [@override](/user/override)
  void initState() {
    super.initState();
    _controller.addListener(() {
      setState(() {});
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: Center(
                child: Row(
                    mainAxisSize: MainAxisSize.max,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
              SizedBox(
                  width: 200,
                  child: TextField(
                    decoration: const InputDecoration(
                      border: OutlineInputBorder(),
                      labelText: 'Username',
                    ),
                    controller: _controller,
                  )),
              const SizedBox(width: 16),
              Avatar(
                source: _controller.text,
                foregroundColor: Colors.pink,
                backgroundColor: Colors.black,
                size: 64,
              ),
            ]))));
  }
}

示例项目

一个示例项目可以在存储库的example文件夹中找到。

常见问题解答

  • 我设置了渐变/装饰图像,但未显示,为什么?
    • 如果你使用了装饰来设置头像,确保backgroundColor被设置为透明,否则它将不会显示。

贡献

欢迎通过提交拉取请求来支持我并解决开放的问题。

捐赠

如果您能够支持我的工作,我将非常感激。谢谢。


示例代码

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

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

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

  [@override](/user/override)
  State<StatefulWidget> createState() => _TestAppState();
}

class _TestAppState extends State<TestApp> {
  final _controller = TextEditingController(text: 'flutter!');

  [@override](/user/override)
  void initState() {
    super.initState();
    _controller.addListener(() {
      setState(() {});
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: Center(
                child: Row(children: [
      SizedBox(
        width: 200,
        child: TextField(
          decoration: const InputDecoration(
            border: OutlineInputBorder(),
            labelText: 'Username',
          ),
          controller: _controller,
        ),
      ),
      const SizedBox(width: 16),
      Avatar(
        source: _controller.text,
        size: 64,
        borderRadius: 0,
        backgroundColor: Colors.black,
        foregroundColor: Colors.redAccent,
        primitives: const [AvatarPrimitive.circle],
        decoration: const BoxDecoration(
          boxShadow: [BoxShadow(blurRadius: 8)],
        ),
      ),
      const SizedBox(width: 16),
      Avatar(
        source: '${_controller.text}3-30r',
        size: 64,
        borderRadius: 8,
        decoration: BoxDecoration(
          gradient: LinearGradient(
              colors: [Colors.pink.shade100, Colors.blue.shade100],
              begin: Alignment.topCenter,
              end: Alignment.bottomRight),
          boxShadow: const [BoxShadow(blurRadius: 8)],
        ),
        backgroundColor: Colors.transparent,
        foregroundColor: Colors.grey,
        primitives: const [AvatarPrimitive.triangle],
      ),
      const SizedBox(width: 16),
      Avatar(
        source: '${_controller.text}d310',
        size: 64,
        borderRadius: 16,
        decoration: const BoxDecoration(
          image: DecorationImage(image: AssetImage('assets/marble.png')),
          boxShadow: [BoxShadow(blurRadius: 8)],
        ),
        backgroundColor: Colors.transparent,
        foregroundColor: Colors.grey.shade700,
        primitives: const [AvatarPrimitive.circle, AvatarPrimitive.square],
      ),
      const SizedBox(width: 16),
      Avatar(
        source: '${_controller.text}ofies39q',
        size: 64,
        borderRadius: 24,
        decoration: const BoxDecoration(
          boxShadow: [BoxShadow(blurRadius: 8)],
        ),
        backgroundColor: Colors.lime,
        foregroundColor: Colors.grey.shade700,
        primitives: const [AvatarPrimitive.circle, AvatarPrimitive.square],
      ),
      const SizedBox(width: 16),
      Avatar(
        source: '${_controller.text}ererre',
        size: 64,
        borderRadius: 32,
        decoration: const BoxDecoration(
          boxShadow: [BoxShadow(blurRadius: 8)],
        ),
        backgroundColor: Colors.black,
        foregroundColor: Colors.purpleAccent,
        primitives: const [AvatarPrimitive.circle, AvatarPrimitive.square],
      ),
    ]))));
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用random_abstract_avatar插件来生成随机抽象头像的代码示例。这个插件可以帮助你快速生成具有不同样式和颜色的抽象头像。

首先,确保你已经在pubspec.yaml文件中添加了random_abstract_avatar依赖项:

dependencies:
  flutter:
    sdk: flutter
  random_abstract_avatar: ^最新版本号  # 请替换为最新的版本号

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

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个完整的示例代码,展示如何生成并显示一个随机抽象头像:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Random Abstract Avatar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Random Abstract Avatar Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // 使用 RandomAbstractAvatar.generate 方法生成随机抽象头像
            Image.memory(
              RandomAbstractAvatar.generate(
                seed: DateTime.now().millisecondsSinceEpoch, // 使用当前时间作为种子以确保每次运行时生成不同的头像
                size: 100, // 设置头像大小
                colorScheme: ColorScheme.fromSwatch(
                  primarySwatch: Colors.blue,
                ),
              )!,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 点击按钮时生成新的随机头像
                setState(() {
                  // 这里我们重新生成一个新的头像,通过改变种子值
                });
              },
              child: Text('Generate New Avatar'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 依赖项添加:在pubspec.yaml文件中添加了random_abstract_avatar依赖项。
  2. 主应用结构:创建了一个简单的Flutter应用,包括一个MaterialApp和一个Scaffold
  3. 头像生成:使用RandomAbstractAvatar.generate方法生成一个随机抽象头像,并将其显示为Image组件。
  4. 按钮点击事件:虽然在这个示例中,点击按钮并没有直接重新生成头像(因为种子是基于当前时间的,每次运行时都会不同),但你可以通过更改种子值或其他参数来在点击按钮时生成新的头像。为了简化示例,这里省略了复杂的逻辑。

请注意,RandomAbstractAvatar.generate方法返回的是一个Uint8List(即字节数组),这个字节数组可以直接传递给Image.memory构造函数来显示图像。

你可以根据需要调整头像的大小、颜色方案等参数,以生成不同风格的抽象头像。

回到顶部