Flutter动态头像光效插件avatar_glow的使用

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

Flutter动态头像光效插件avatar_glow的使用

描述

Avatar Glow 是一个Flutter小部件,提供带有酷炫背景发光动画的头像效果。你可以通过简单的配置为你的应用添加这种引人注目的视觉效果。

PieChart

安装

在你的 pubspec.yaml 文件中,于 dependencies: 部分添加以下内容:

dependencies:
  avatar_glow: ^2.1.0  # 使用最新版本

或者直接从GitHub仓库获取最新更改:

dependencies:
  avatar_glow:
    git:
      url: https://github.com/apgapg/avatar_glow
      ref: master

使用方法

导入库

首先需要导入 avatar_glow 库:

import 'package:avatar_glow/avatar_glow.dart';

简单实现

下面是一个简单的用法示例,展示了如何创建一个带有发光效果的头像:

AvatarGlow(
  endRadius: 60.0,
  child: Material(     // 替换此子元素为你自己的内容
    elevation: 8.0,
    shape: CircleBorder(),
    child: CircleAvatar(
      backgroundColor: Colors.grey[100],
      child: Image.asset(
        'assets/images/dart.png',
        height: 50,
      ),
      radius: 30.0,
    ),
  ),
),

完整实现

对于更详细的配置选项,可以参考以下完整的例子:

AvatarGlow(
  startDelay: const Duration(milliseconds: 1000), // 开始延迟时间
  glowColor: Colors.white,                       // 发光颜色
  glowShape: BoxShape.circle,                    // 发光形状(圆形)
  animate: _animate,                             // 是否开启动画
  curve: Curves.fastOutSlowIn,                   // 动画曲线
  child: const Material(
    elevation: 8.0,
    shape: CircleBorder(),
    color: Colors.transparent,
    child: CircleAvatar(
      backgroundImage: AssetImage('assets/images/avatar.png'),
      radius: 50.0,
    ),
  ),
),

示例Demo

这里提供了一个完整的示例代码,展示了如何将 AvatarGlow 集成到应用程序中,并允许用户控制发光动画的启停:

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Avatar Glow Demo',
      theme: ThemeData(useMaterial3: true),
      home: const HomePage(),
    );
  }
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  bool _animate = true;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Avatar Glow by @apgapg"),
      ),
      body: ListView(
        children: <Widget>[
          Container(
            padding: const EdgeInsets.all(32.0),
            color: Theme.of(context).primaryColor,
            child: Column(
              children: [
                AvatarGlow(
                  animate: _animate,
                  child: Material(
                    elevation: 8.0,
                    shape: const CircleBorder(),
                    child: CircleAvatar(
                      backgroundColor: Colors.grey[100],
                      radius: 30,
                      child: Image.asset(
                        'assets/images/dart.png',
                        height: 50,
                      ),
                    ),
                  ),
                ),
                const SizedBox(height: 32.0),
                AvatarGlow(
                  startDelay: const Duration(milliseconds: 1000),
                  glowColor: Colors.white,
                  glowShape: BoxShape.circle,
                  animate: _animate,
                  curve: Curves.fastOutSlowIn,
                  child: const Material(
                    elevation: 8.0,
                    shape: CircleBorder(),
                    color: Colors.transparent,
                    child: CircleAvatar(
                      backgroundImage: AssetImage('assets/images/avatar.png'),
                      radius: 50.0,
                    ),
                  ),
                ),
              ],
            ),
          ),
          const SizedBox(height: 32.0),
          Row(
            mainAxisSize: MainAxisSize.min,
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              AvatarGlow(
                animate: _animate,
                glowColor: Colors.red,
                child: Material(
                  elevation: 8.0,
                  shape: const CircleBorder(),
                  child: CircleAvatar(
                    backgroundColor: Colors.grey[100],
                    radius: 40.0,
                    child: Image.asset(
                      'assets/images/flutter.png',
                      height: 60,
                    ),
                  ),
                ),
              ),
              AvatarGlow(
                animate: _animate,
                glowColor: Colors.red,
                child: Material(
                  elevation: 8.0,
                  shape: const CircleBorder(),
                  child: CircleAvatar(
                    backgroundColor: Colors.grey[100],
                    radius: 40.0,
                    child: Image.asset(
                      'assets/images/love.png',
                      height: 60,
                    ),
                  ),
                ),
              ),
            ],
          ),
          const SizedBox(height: 32.0),
          AvatarGlow(
            animate: _animate,
            glowColor: Colors.cyan,
            child: Material(
              elevation: 8.0,
              shape: const CircleBorder(),
              child: CircleAvatar(
                backgroundColor: Colors.grey[100],
                radius: 30.0,
                child: Image.asset(
                  'assets/images/dart.png',
                  height: 50,
                ),
              ),
            ),
          ),
        ],
      ),
      floatingActionButton: AvatarGlow(
        animate: _animate,
        glowColor: Colors.red,
        child: IconButton(
          onPressed: () {
            setState(() => _animate = !_animate);
          },
          iconSize: 42.0,
          icon: Icon(
            _animate ? Icons.pause_rounded : Icons.play_arrow_rounded,
            color: Colors.white,
          ),
        ),
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      bottomNavigationBar: BottomAppBar(
        notchMargin: 8,
        clipBehavior: Clip.antiAlias,
        color: Theme.of(context).primaryColor,
        shape: const CircularNotchedRectangle(),
      ),
    );
  }
}

这段代码创建了一个包含多个 AvatarGlow 小部件的应用页面,并且通过浮动按钮来切换所有发光动画的状态。希望这个例子能帮助你更好地理解和使用 AvatarGlow 插件!


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

1 回复

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


当然,下面是一个关于如何在Flutter中使用avatar_glow插件来实现动态头像光效的代码示例。avatar_glow插件允许你为一个头像添加动态发光效果,非常适合应用在社交应用、游戏或者任何需要吸引用户注意的场景中。

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

dependencies:
  flutter:
    sdk: flutter
  avatar_glow: ^2.0.0  # 请检查最新版本号

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

接下来,在你的Flutter项目中,你可以像这样使用AvatarGlow组件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Avatar Glow Example'),
        ),
        body: Center(
          child: AvatarGlowExample(),
        ),
      ),
    );
  }
}

class AvatarGlowExample extends StatefulWidget {
  @override
  _AvatarGlowExampleState createState() => _AvatarGlowExampleState();
}

class _AvatarGlowExampleState extends State<AvatarGlowExample> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 2),
      vsync: this,
    )..repeat(reverse: true);

    _animation = CurvedAnimation(
      parent: _controller,
      curve: Curves.easeInOut,
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AvatarGlow(
      glowColor: Colors.blue.withOpacity(0.8),  // 发光颜色
      endRadius: 30.0,  // 最大半径
      startDelay: Duration(milliseconds: 100),  // 开始延迟
      repeat: true,  // 是否重复
      repeatPauseDuration: Duration(milliseconds: 100),  // 重复暂停时间
      showTwoGlows: true,  // 是否显示两层光效
      animation: _animation,  // 动画控制
      child: Material(
        elevation: 8.0,
        shape: CircleBorder(),
        child: Image.network(
          'https://example.com/your-avatar-image.png',  // 替换为你的头像URL
          width: 100.0,
          height: 100.0,
          fit: BoxFit.cover,
        ),
      ),
    );
  }
}

在这个示例中:

  1. AvatarGlow组件接收多个参数来控制光效的行为和外观。
  2. glowColor参数设置了光效的颜色。
  3. endRadius参数设置了光效的最大半径。
  4. startDelay参数设置了光效开始的延迟时间。
  5. repeat参数控制光效是否重复。
  6. repeatPauseDuration参数设置了光效重复之间的暂停时间。
  7. showTwoGlows参数决定了是否显示两层光效。
  8. animation参数允许你通过动画控制器来控制光效的变化。

你可以根据实际需求调整这些参数来实现不同的光效效果。记得将Image.network中的URL替换为你自己的头像图片链接。

回到顶部