Flutter圆形徽章头像插件circular_badge_avatar的使用

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

Flutter圆形徽章头像插件circular_badge_avatar的使用

描述

一个有用的Flutter包,用于制作带有徽章或不带徽章的圆形头像。此控件将减少为项目编写可调整圆形徽章头像代码的工作量。

特性

  • 可以更改圆形背景颜色
  • 可以设置自己的字母或数据库名称/用户名。它会自动拆分前两位并显示为大写字母而不是图片
  • 可以更改徽章颜色
  • 可以设置自己的占位符图片
  • 可以调整图像选择图标的位置(顶部或底部)
  • 有很多其他选项供您选择和使用

开始使用

只需在依赖项中添加以下内容:

circular_badge_avatar: ^0.1.4

然后在需要使用该控件的地方导入以下行:

import 'package:circular_badge_avatar/circular_badge_avatar.dart';

如果需要手动导入辅助类,请复制并粘贴以下代码到导入部分。您可以使用这两个辅助类中的任何一个。

import 'package:circular_badge_avatar/helper/image_picker_dialog.dart';

import 'package:circular_badge_avatar/helper/bottomsheet_image_picker.dart';

所有参数都是可选的。您可以覆盖所有这些参数。

/// [圆圈属性]
String centeralText;
Color centeralTextColor;
double centeralTextSize;
Color circleBgColor;
Color circleBorderColor;
double circleBorderWidth;
double circleBorderRadius;
String assetImage;
String networkPlaceholderImage;
String networkImage;
XFile imagePath;
String imageString;

/// [图标属性]
IconData icon;
double iconSize;
Color iconBgColor;
Color iconColor;
Color iconBorderColor;
double iconBorderWith;
double iconPosition;
VoidCallback iconOnTap;
bool needImagePickerIcon;

使用示例

请查看示例文件夹中的/example来了解更多信息。

示例输出

示例输出

CircularBadgeAvatar

这个控件允许您使用颜色、文本或资产图片、网络图片、Firebase图片路径等对圆形徽章头像进行各种操作。

请悬停CircularBadgeAvatar以查看更多可用参数

悬停CircularBadgeAvatar可以看到更多可用参数。

示例代码

import 'dart:developer';
import 'package:circular_badge_avatar/circular_badge_avatar.dart';
import 'package:circular_badge_avatar/helper/bottomsheet_image_picker.dart';
import 'package:circular_badge_avatar/helper/image_picker_dialog.dart';
import 'package:circular_badge_avatar/helper/show_snackbar.dart';
import 'package:circular_badge_avatar/helper/show_toast.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Circular Badge Avatar',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const ExampleScreen(),
    );
  }
}

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

  [@override](/user/override)
  State<ExampleScreen> createState() => _ExampleScreenState();
}

class _ExampleScreenState extends State<ExampleScreen> {

  /// [Xfile 或者转换 XFile 成字符串]
  String? selectedImagePath1;
  XFile? imageSource1;
  XFile? imageSource2;



  [@override](/user/override)
  Widget build(BuildContext context) {
    ToastContext().init(context);
    return Scaffold(
      appBar: AppBar(
        title: const Text("Circular Badge Examples"),
        centerTitle: true,
      ),
      body: Center(
        child: SingleChildScrollView(
          child: Padding(
            padding: const EdgeInsets.all(12.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                const SizedBox(height: 20),

                SizedBox(
                  height: 110,
                  child: CircularBadgeAvatar(
                    iconPosition: 10, // 调整您的图标位置
                    icon: Icons.info_outline, // 替换为您喜欢的图标
                    iconSize: 15, // 调整图标大小
                    centeralText: "Muka Ahmed",
                    /// [如果您想使用资产图片]
                    // assetImage: "assets/images/asset_image.png",
                    iconOnTap: () {
                      showSuccessSnackBar(message: "An example of info circular badge avater", context: context);
                    },
                  ),
                ),
                const SizedBox(height: 20),

                SizedBox(
                  height: 110,
                  child: CircularBadgeAvatar(
                    needImagePickerIcon: true, // 如果决定不显示拾取器图标且用户无法选择任何图片 [needImagePickerIcon: false]
                    // 它的图片作为字符串但实际类型是文件。 所以正常的资产字符串将不会在这里使用
                    // 图片来自 Firebase、File、XFile 路径可以在这里使用
                    imageString: selectedImagePath1, 
                    iconOnTap: () async { 
                      final file = await showDialog&lt;XFile&gt;(
                        context: context,
                        builder: (context) {
                          return const ImagePickerDialogBox(
                            ///title: Text("Pick your"),
                            //titleText: "Please choose your media",
                          );
                        },
                      );
                      setState(() {                      
                        selectedImagePath1 = file!.path; // e.g: 你需要设置路径
                      });
                    },  
                  ),
                ),
                const SizedBox(height: 20),

                SizedBox(
                  height: 110,
                  child: CircularBadgeAvatar(
                    imagePath: imageSource1, // imagePath 只接受 XFile
                    iconOnTap: () async { 
                      final file = await showModalBottomSheet&lt;XFile&gt;(
                        context: context,
                        builder: (context) {
                          return const BottomSheetImagePicker(
                            ///title: Text("Pick your"),
                            //titleText: "Please choose your media",
                          );
                        },
                      );                   
                      setState(() {                      
                        imageSource1 = file!; // e.g: 你需要设置路径
                      });
                    },  
                  ),
                ),
                const SizedBox(height: 20),

                SizedBox(
                  height: 110,
                  child: CircularBadgeAvatar(
                    imagePath: imageSource2,
                    iconOnTap: () async {
                      final file = await showDialog&lt;XFile&gt;(
                        context: context,
                        builder: (context) {
                          return const ImagePickerDialogBox(
                            ///title: Text("Pick your"),
                            titleText: "Please choose your media",
                          );
                        },
                      );

                      if (file != null) {
                        /// [先挑选一张图片,然后将其转换为您想要的格式]
                        /// [imageSource] 是一个 XFile。 因此可以直接发送 XFile 进行查看
                        imageSource2 = file;
                        // selectedImagePath1 = file.path;
                        log("Seding a string =&gt; $selectedImagePath1");
                        log("Seding a XFile =&gt; ${imageSource1?.path}");
                        if (mounted) {
                          showSuccessSnackBar(
                            message: "Image upload successfully!",
                            context: context,
                          );
                        }
                      } else {
                        log("file is null");
                      }

                      setState(() {});
                    },
                  ),
                ),
                const SizedBox(height: 50),

                /// [只是一个间隔]
                ///
              ],
            ),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用circular_badge_avatar插件的一个简单示例。这个插件允许你在用户头像上显示一个圆形徽章,通常用于显示通知或未读消息数量等信息。

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

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

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

安装完成后,你可以在你的Dart文件中使用CircularBadgeAvatar组件。以下是一个完整的示例代码:

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

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Circular Badge Avatar Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            CircularBadgeAvatar(
              avatar: NetworkImage('https://via.placeholder.com/150'), // 用户头像URL
              badgeContent: Text('5'), // 徽章内容
              badgeColor: Colors.red, // 徽章颜色
              badgeBackgroundColor: Colors.white, // 徽章背景颜色
              badgePosition: BadgePosition.topRight, // 徽章位置
              badgeMargin: EdgeInsets.all(4.0), // 徽章边距
              badgePadding: EdgeInsets.all(4.0), // 徽章内边距
              badgeBorderRadius: 10.0, // 徽章圆角半径
            ),
            SizedBox(height: 20),
            CircularBadgeAvatar(
              avatar: CircleAvatar(
                backgroundImage: NetworkImage('https://via.placeholder.com/150'),
                radius: 50.0,
              ),
              badgeContent: Icon(Icons.notifications_none, color: Colors.white), // 使用图标作为徽章内容
              badgeColor: Colors.blue,
              badgeBackgroundColor: Colors.blueAccent,
              badgePosition: BadgePosition.bottomRight,
              badgeAnimation: BadgeAnimation.scale, // 徽章动画效果
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个简单的Flutter应用,其中包含两个CircularBadgeAvatar组件。
  2. 第一个CircularBadgeAvatar使用了一个网络图片作为头像,并在右上角显示了一个包含数字“5”的红色徽章。
  3. 第二个CircularBadgeAvatar使用了CircleAvatar组件来显示一个圆形头像,并在右下角显示了一个带有通知图标的蓝色徽章。

你可以根据需要调整徽章的颜色、位置、动画效果等属性。circular_badge_avatar插件提供了丰富的自定义选项,使得集成和使用变得非常灵活。

回到顶部