Flutter笔记:发布一个Flutter头像模块 easy_avatar

news2024/10/6 16:26:42
Flutter笔记
发布一个头像Flutter模块 easy_avatar

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/133912019
模块地址:https://pub.dev/packages/easy_avatar
(国内访问:https://pub-web.flutter-io.cn/packages/easy_avatar)



1. 概述

在这里插入图片描述

当你看到这篇文章的时候,先不要误以为笔者不知道 Flutter 中提供了一个 近乎与没有提供没太大区别的 CircleAvatar组件。对,它真的仅仅就是圆形头像——除非,你使用 Clip 类组件当然剪裁成一个你想要的样子。不过它的功能还是太弱了。其实,最初我想做的仅仅是淘宝消息的好友头像,这非常简单:

在这里插入图片描述

不过考虑到实际需求,和更多的项目场景,比如——图片缺失的处理方案、图片出错的错误方案、图片背景的处理方案,以及一些特殊效果。例如,有一张原始的头像是这样的:

在这里插入图片描述
配合下面的背景图:

https://gitee.com/jacklee1995/example-pictures/raw/master/scenery/jonathanvasquez8950_scenery_2f6031d1-c4fe-41d7-8abf-d1c9c40d9981.png
经过简单配置,就可以得到下面爬出相框的效果:

在这里插入图片描述
另外,一些图片、背景的调整都是自动的,你要配置的可能真的很少。比如,当指定头像图片时,你不需要考虑时网络图片还是本地图片——通常在Flutter中,需要使用 Image 的两个不同构造函数,即 networkasset 来加载。但是这都处理好了,如果时网络地址,则直接传入 图片的 url 字符串;如果是 assets 下的静态资源图片,也可以直接传入资源位置字符串,并且都是通过 image 属性指定。

而且,你不需要考虑,网络地址或者本地资源是否有效,如果图像资源失效,将会更换为我画好的默认头像,看起来就像这样:
在这里插入图片描述

2. 安装

你可以使用 pub 包管理工具在你的项目中运行如下命令添加到你的 Flutter 项目中:

flutter pub add easy_avatar

这将在你的项目的 pubspec.yaml 中添加一行(并运行一个隐式的dart pub get):

dependencies:
  easy_avatar: ^1.0.0

版本号可能随时间变化。

3. 快速入门

The simplest example is to use the default avatar and default parameters:
最简单的例子是使用默认头像及默认参数:

const Avatar()

The effect of this code is as follows:
其运行效果如下:

在这里插入图片描述

你也可以指定一些头像参数,但是如果你指定一个错误的头像地址,将自动地使用默认头像,例如:

Avatar(
  width: 100,
  height: 100,
  backgroundColor: Colors.indigo,
  borderRadius: 40,
  padding: EdgeInsets.all(20),
  image: 'https://example.com/avatar.jpg',
),

The effect of this code is as follows:
其运行效果如下:

在这里插入图片描述

如果要可以设置一个真实的网络图片URL作为头像,则它必须以http开头,例如:

const Avatar(
  width: 200,
  height: 200,
  borderRadius: 100,
  image:
      'https://profile-avatar.csdnimg.cn/bb869bb0b79b48209c6206043890c985_qq_28550263.jpg',
),

The effect of this code is as follows:
其运行效果如下:

在这里插入图片描述

Oh, this is me. An active user of the open source community!
哦,这就是我了。一个开源社区的活跃用户!

Actually, you can also use animation, which doesn’t matter:
其实你还可以使用动图,这没关系的:

const Avatar(
  width: 200,
  height: 200,
  margin: EdgeInsets.all(6),
  borderRadius: 60,
  image:
      'https://github.githubassets.com/images/mona-loading-dimmed.gif',
),

The effect of this code is as follows:
其运行效果如下:

在这里插入图片描述

If the avatar itself has a transparent background, you can see the default background color or background picture. Also, you can add an outer border for your avatar, such as:
如果头像本身是透明背景的,可以看到默认背景色 或 背景图片。并且,你还可以为你的头像添加外边框,例如:

Avatar(
  width: 200,
  height: 200,
  padding: const EdgeInsets.all(10),
  margin: const EdgeInsets.all(10),
  borderRadius: 80,
  backgroundColor: Colors.white, // 如不设置,则为灰色
  // 可以为你的头像添加边框
  border: Border.all(
    color: const Color.fromARGB(255, 0, 0, 0),
    width: 6.0,
    style: BorderStyle.solid,
    strokeAlign: BorderSide.strokeAlignInside,
  ),
  image:
      'https://gitee.com/jacklee1995/example-pictures/raw/master/asian/asian-girl-avatar.png',
),

The effect of this code is as follows:
其运行效果如下:

在这里插入图片描述

Next is an example of using a network picture as a background picture, which will cover the background color effect:
接下来是一个使用网络图片作为背景图的例子,这个网络图片将覆盖背景颜色效果:

const Avatar(
  width: 200,
  height: 200,
  margin: EdgeInsets.all(10),
  borderRadius: 80,
  backgroundImage:
      'https://gitee.com/jacklee1995/example-pictures/raw/master/scenery/jonathanvasquez8950_scenery_2f6031d1-c4fe-41d7-8abf-d1c9c40d9981.png',
  image:
      'https://gitee.com/jacklee1995/example-pictures/raw/master/asian/asian-girl-avatar.png',
),

The effect of this code is as follows:
其运行效果如下:

在这里插入图片描述

Now, let’s explore some special effects - Avatar out of the box.

The Avatar class provides an intermediate layer border property called interlayerBorder. Using this property instead of the border property will help you achieve the effect of characters coming out of the frame. Here’s an example code:
下面我们玩一点特效——人物出框。
Avatar 类提供了一个中间层边框属性 interlayerBorder,通过该属性而不是 border 属性设置的边框将帮助你完成人物出框的效果。示例代码如下:

Avatar(
  width: 200,
  height: 200,
  interlayerBorder: Border.all(
    color: const Color.fromARGB(255, 255, 251, 3),
    width: 20.0,
    style: BorderStyle.solid,
    strokeAlign: BorderSide.strokeAlignInside,
  ),
  // margin: const EdgeInsets.all(6),
  borderRadius: 100,
  backgroundImage:
      'https://gitee.com/jacklee1995/example-pictures/raw/master/scenery/jonathanvasquez8950_scenery_2f6031d1-c4fe-41d7-8abf-d1c9c40d9981.png',
  image: 'assets/asian-boy-avatar.png', // 也可以使用本地图片资源
)

其效运行果如下:

在这里插入图片描述

尽情探索吧!~

3. API 编程接口

class Avatar

A widget that displays an avatar with various customization options.
此类是一个显示带有各种自定义选项的头像的组件。

This widget allows you to display avatars with custom dimensions, border radius, background color, and an optional background image. You can specify both network and local images for the avatar.

该组件允许您显示具有自定义尺寸、边框半径、背景颜色和可选背景图像的头像。可以为头像指定网络和本地图像。

Example Usage 示例

Avatar(
  width: 150,
  height: 150,
  borderRadius: 75,
  backgroundImage: 'https://example.com/avatar-background.jpg',
  backgroundColor: Colors.blue,
  image: 'assets/avatar.jpg',
  margin: EdgeInsets.all(10),
  padding: EdgeInsets.all(5),
)

Constructor 构造函数

默认构造函数 Avatar

Creates an Avatar widget.

创建Avatar组件。

  • width (double, optional): The width of the avatar. Default is 100.

    • 头像的宽度。默认为100。
  • height (double, optional): The height of the avatar. Default is 100.

    • 头像的高度。默认为100。
  • borderRadius (double, optional): The border radius of the avatar. Default is 50.

    • 头像的边框半径。默认为50。
  • backgroundImage (String, optional): The URL for the background image of the avatar.

    • 头像的背景图像的URL。
  • backgroundColor (Color, optional): The background color of the avatar if backgroundImage is not provided. Default is a gray color.

    • 如果没有提供backgroundImage,则设置头像的背景颜色。默认为灰色。
  • image (String, required): The image for the avatar, which can be either a network URL or a local asset path.

    • 用于设置头像的图像,可以是网络URL或本地资源路径。
  • margin (EdgeInsetsGeometry, optional): The margin around the entire avatar. Default is no margin.

    • 控制整个头像周围的边距。默认没有边距。
  • padding (EdgeInsetsGeometry, optional): The padding within the avatar, affecting only the avatar image. Default is no padding.

    • 应用于头像内部,仅影响头像图像的填充。默认没有填充。
  • border (Border, optional): The border for the avatar.

    • 头像的边框。
  • interlayerBorder (Border, optional): The interlayer border for the avatar.

    • 头像的中间层边框。

Issue Tracker

你可以在 Github 上报告错误:https://github.com/jacklee1995/flutter_easy_avatar/issues

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion WebUI几种解决手崩溃的方法

1. 添加与手相关负面提示词 如何提价提示词呢? 首先有一个embeddings模型文件bad-hands-5,我们可以去各个大模型网站去搜,我是在C站上面下载的。 附上C站地址:https://civitai.com/ 下载好之后,你需要将文件放入stable-diffusion-webui\embeddings目录中。位置如下所示…

【Linux-常用命令-基础命令-解压rar文件-unrar-x-命令-笔记】

【Linux-常用命令-基础命令-解压rar文件-unrar-x-命令-笔记】 1、前言2、操作3、自己的操作 1、前言 最近,在使用Linux的时,使用相关基础命令是,总是容易忘记,上网一搜,大部分都写的比较繁琐,解压不同文件…

执法记录仪主板_基于MTK6877联发科5G主板方案

4G/5G智能执法记录仪是一种集成了先进的人工智能和传感器技术的设备,不仅可以记录事件发生的过程,还能够辅助工作人员进行人车识别、安全预警。这种记录仪使用联发科MT6877芯片作为主板方案,该芯片采用了6纳米工艺制程,拥有八核CP…

揭秘108个CMD命令,让你成为计算机大神

今天整理了一些cmd命令 👉操作方法:快捷键winR,输入cmd回车,然后就可以输入cmd命令了,赶紧收藏起来,用的时候更方便 想了解更多网工知识,获取《网工大礼包》,可关注公众号&…

PTE-精听学习(二)

目录 时间分配 消音题可以帮忙 节约时间的 剩余9个题目一定要剩余出10分钟以上 MSA 单选题看时间 评分标准 ​编辑 SMW 单词长 空挡 会早一点 单词短 beep短 会晚一点 做题方法 1.先猜 2.不准记笔记 3.搭配 HIW 大分题不是小分题 评分标准 3-6个是比较常见…

zabbix-proxy代理服务器配置

下载zabbix源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 安装 yum -y install zabbix-proxy-mysql zabbix_get 查看相关文件路径 rpm -ql zabbix-proxy-mysql 创建数据库 mysq -uroot -proot mysql> create database…

Kubeadm部署k8s集群

目录 主机准备 主机配置 修改主机名(三个节点分别执行) 配置hosts(所有节点) 关闭防火墙、selinux、swap、dnsmasq(所有节点) 安装依赖包(所有节点) 系统参数设置(所有节点) 时间同步(所有节点) 配…

vite中配置 https 安全超文本网络协议

vite中配置 https 安全超文本网络协议 1、本地模拟生成证书2、安装证书3、vite 中使用插件支持 https 协议 前言: https 的配置是相对安全的,但是需要购买证书,它是 SSL/TLS HTTP 的安全超文本网络协议 此版本配置的是在 vite 开发服务器上临…

uni-table多选获取当前行数据 - - -亲测有效

废话不多说,直接上代码 因为全选的时候,只能返回当前的索引,所有要处理一下 代码如下: selectionChange(e) {let arrList [] // 选择的行数据let selectedIndexs [] // 选择的下标数组selectedIndexs e.detail.index// 将数组中的值,作为table表格数…

ArGIS Engine专题(13)之矢量要素图层符号化(单一符号化渲染)

一、结果预览 二、简介 要素符号化是指为地理要素(如点、线、面等)设置视觉表示样式的过程。通过符号化,可以将地理要素以不同的颜色、大小、形状、填充等方式呈现,以便更好地表达地理数据的含义和特征。 本文主要实现了四大类要素符号化方式,包括单一符号化渲染、唯一值渲…

Linux上如何部署SpringBoot项目——手把手教会你

目录 前言 1、准备操作 1.1、Linux上安装jdk 1.2、准备MySQL数据库 1.3、打开云服务器的防火墙 1.4、准备jar包 2、部署 前言 下面是教你部署SpringBoot项目,jar包形式的,不是war包!!! 1、准备操作 1.1、Linux…

【网络安全】防火墙技术

防火墙是网络安全防御的重要组成部分,它的主要任务是阻止或限制不安全的网络通信。在这篇文章中,我们将详细介绍防火墙的工作原理,类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例,以便于初学者理解。 如果你对…

java基础面试:继承、final关键字、抽象类、接口

继承 子类能继承父类的非私有成员变量和成员方法。 继承后子类的对象由子类与父类共同组成,每次new出来的对象都是由父类与子类中的所有成员共同组成,所谓的父类中的private无法被继承是指无法访问private修饰的成员,并不是private修饰的成员…

走进API,了解数字化转型时代应用新宠

现今,国家正全面推进各行业数字化转型进程,“十四五”规划和2035年远景目标纲要明确提出“加快数字化发展”“建设数字中国”要求。近年来,随着数字化时代的来临,加之疫情的催生,已有越来越多的企业投入到数字化转型的…

写组件的过程中没写过的vue3写法

这是我写的组件, 父组件代码: 子组件代码: 首先遇到的问题是,我希望点击draw的确定按钮显示dialog弹框,发现不能在dialog弹框中去定义true和false,要在外部传进去,所以我注释了子组件中的const hideOrshowItem ref(false)代码, 然后子文件中用的所有的hideOrshowItem就都报错…

2023年四川省网络与信息安全技能大赛初赛 个人赛 Writeup

文章目录 WebPHPs Endingweb-game-1-1can_you_getshell Pwnbabyshell Reversepacked MiscedocneBaby_TCP Web PHP’s Ending 反序列化、eval截断、无参数RCE <?php// error_reporting(0);// highlight_file(__FILE__);class saday{public $reason"things dont work…

如何借助边缘智能网关打造智慧城市便民驿站

智慧城市驿站是一类提供多样化便利服务的新型智能公共设施&#xff0c;通过融合物联网技术、边缘智能技术、新能源技术等&#xff0c;为城市居民整合提供休闲、购物、卫生、广告、安全等公共服务&#xff0c;进一步提升日常生活体验。本篇就为大家介绍如何基于边缘智能网关&…

React 路由总结 react-router-dom6+react-router-dom5

开题 单页面应用和多页面应用 SPA&#xff1a;单页面应用程序&#xff0c;整个应用中只有一个页面(index.html) MPA&#xff1a;多页面应用程序&#xff0c;整个应用中有很多页面(*.html) react路由 现在的前端应用大多都是SPA单页面应用程序&#xff0c;也就是一个HTML页面的…

C++ 与 Lua 数据交互载体——栈

一、栈 Lua 和 C 之间的通讯主要组件是无处不在的虚拟栈&#xff0c;两者间的数据交换都是通过这个栈进行。 栈中可以保存 Lua 任意类型的值。 1、Lua 和 C 之间的数据交互存在的差异 Lua 是动态类型&#xff0c;C 是静态类型&#xff0c;两者不匹配Lua 是自动内存管理&…

【周末闲谈】VR新视界,“眼”见未来

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 系列目录前言虚拟现实(VR)技术虚拟现实技术的原理虚拟现实技术发…