【Flutter】Flutter 使用 badges 实现创建数字徽章

news2024/12/24 21:18:54

【Flutter】Flutter 使用 badges 实现创建数字徽章

文章目录

    • 一、前言
    • 二、安装与基本使用
    • 三、徽章的高级用法
    • 四、徽章的动画效果
    • 五、徽章的形状
    • 六、完整的实际业务代码示例
    • 七、总结

一、前言

你好!今天我要为你介绍一个非常实用的 Flutter 包——badges。这个包可以帮助你轻松地为任何小部件添加徽章,例如显示购物车中的物品数量。在这篇文章中,我将手把手地教你如何使用它,并为你提供一些实际的业务代码示例。

文章的重点包括:如何安装和基本使用、徽章的高级用法、徽章的动画效果、徽章的形状。希望你能够通过这篇文章,更好地理解和使用这个包。

这是小雨青年于 2023 年发布在 CSDN 的博客,由于目前采集站侵权行为猖獗,如果你不是在 CSDN 看到本文,麻烦你通过 CSDN 联系我,谢谢你的支持。

你是否对成为 Flutter 高手充满渴望,想要掌握更多前沿技巧和最佳实践?现在,你的机会来了!

🚀 Flutter 从零到一:基础入门到应用上线全攻略 正在热烈招募参与者!

✅ 这个专栏不仅包括了全面的 Flutter 学习资源,还有实用的代码示例和深入的解析教程。
✅ 专栏内容会持续更新,价格也会随之上涨。现在加入,享受最优惠的价格,抓住属于你的机会!
✅ 想要与其他 Flutter 学习者互动交流吗?点击这里 加入我们的讨论群,一起成长、一起进步。

别再等待,让我们今天就启程,共同开启 Flutter 的精彩学习之旅吧!

二、安装与基本使用

首先,我们需要在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  badges: ^3.1.2

安装完成后,由于在 Flutter 3.7 中,Material 库中引入了 Badge 小部件,为了避免导入冲突,我们需要这样导入包:

import 'package:badges/badges.dart' as badges;

然后,你可以使用 badges.Badge 小部件而不是 Badge 小部件。这对于这个包中的所有类都是一样的。

基本使用如下:

badges.Badge(
  badgeContent: Text('3'),
  child: Icon(Icons.settings),
)

这样,你就可以在设置图标上看到一个带有数字“3”的徽章了。

三、徽章的高级用法

除了基本的使用方法,badges 包还提供了一些高级的用法,让你可以根据需要自定义徽章的外观和行为。

例如,你可以设置徽章的位置、是否显示徽章、徽章的内容、徽章的动画效果等。以下是一个高级用法的示例:

badges.Badge(
  position: badges.BadgePosition.topEnd(top: -10, end: -12),
  showBadge: true,
  ignorePointer: false,
  onTap: () {},
  badgeContent: Icon(Icons.check, color: Colors.white, size: 10),
  badgeAnimation: badges.BadgeAnimation.rotation(
    animationDuration: Duration(seconds: 1),
    colorChangeAnimationDuration: Duration(seconds: 1),
    loopAnimation: false,
    curve: Curves.fastOutSlowIn,
    colorChangeAnimationCurve: Curves.easeInCubic,
  ),
  badgeStyle: badges.BadgeStyle(
    shape: badges.BadgeShape.square,
    badgeColor: Colors.blue,
    padding: EdgeInsets.all(5),
    borderRadius: BorderRadius.circular(4),
    borderSide: BorderSide(color: Colors.white, width: 2),
    borderGradient: badges.BadgeGradient.linear(
      colors: [Colors.red, Colors.black]
    ),
    badgeGradient: badges.BadgeGradient.linear(
      colors: [Colors.blue, Colors.yellow],
      begin: Alignment.topCenter,
      end: Alignment.bottomCenter,
    ),
    elevation: 0,
  ),
  child: Text('Badge'),
)

四、徽章的动画效果

badges 包不仅支持基础和高级的徽章用法,还提供了多种动画效果,让你的徽章更加生动有趣。以下是一些可用的动画类型:

  1. BadgeAnimation.slide
  2. BadgeAnimation.fade
  3. BadgeAnimation.scale
  4. BadgeAnimation.size
  5. BadgeAnimation.rotation

你还可以设置循环动画,这样动画会一直循环,直到你停止它。使用动画非常简单,只需要在 badgeAnimation 属性中设置即可,如下例所示:

badgeAnimation: badges.BadgeAnimation.rotation(
  animationDuration: Duration(seconds: 1),
  colorChangeAnimationDuration: Duration(seconds: 1),
  loopAnimation: false,
  curve: Curves.fastOutSlowIn,
  colorChangeAnimationCurve: Curves.easeInCubic,
)

五、徽章的形状

badges 包还提供了多种徽章形状,以满足不同场景的需求。以下是一些可用的形状:

  1. BadgeShape.circle
  2. BadgeShape.square
  3. BadgeShape.twitter
  4. BadgeShape.instagram

你可以通过 badgeStyleshape 属性来设置徽章的形状,如下例所示:

badgeStyle: badges.BadgeStyle(
  shape: badges.BadgeShape.square,
  // 其他样式设置
)

六、完整的实际业务代码示例

假设我们正在开发一个购物应用,我们希望在购物车图标上显示用户已添加到购物车的商品数量。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:badges/badges.dart' as badges;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '购物应用',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  int cartItemCount = 5;

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('购物应用'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('欢迎使用购物应用!', style: TextStyle(fontSize: 24)),
            SizedBox(height: 20),
            badges.Badge(
              badgeContent: Text('$cartItemCount', style: TextStyle(color: Colors.white)),
              position: badges.BadgePosition.topEnd(top: -12, end: -12),
              child: IconButton(
                icon: Icon(Icons.shopping_cart, size: 100),
                onPressed: () {
                  // 跳转到购物车页面或其他操作
                },
              ),
            )
          ],
        ),
      ),
    );
  }
}

在这个优化后的示例中,购物车图标被放置在屏幕的中心位置,并增大了尺寸,使其更加醒目。徽章仍然显示在图标的右上角,显示用户已添加到购物车的商品数量。

七、总结

经过上面的介绍,我相信你已经对 badges 包有了深入的了解。这个包为 Flutter 开发者提供了一个简单而强大的工具,帮助我们轻松地为任何小部件添加徽章。无论你是在开发购物应用、社交应用还是其他类型的应用,badges 包都可以为你提供很大的帮助。希望你能够在实际的项目中充分利用这个包,创造出更加出色的应用。

对 Flutter 感兴趣,渴望深入探索和学习吗?Flutter 从零到一:基础入门到应用上线全攻略 正是你的完美起点!

📘 在这个专栏中,你将发现丰富的 Flutter 学习资源,从代码示例到深入的技术解读,一应俱全。
🛠️ 想要了解如何用 Flutter 构建出色的应用吗?所有的秘诀和答案都在我们的专栏里等着你!
💰 别再犹豫,专栏内容将不断更新,价格也将逐渐上涨。现在就加入,享受最优惠的价格,开启你的 Flutter 探索之旅!

想了解更多?点击这里查看 Flutter Developer 101:入门小册 & 专栏指引

👥 还有,别忘了点击这里 加入我们的讨论群,与其他 Flutter 爱好者一起交流和学习,共同成长!

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

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

相关文章

QTableView合并单元格

QtableView的功能 QTableView是Qt框架提供的用于显示表格数据的类。它是基于MVC&#xff08;模型-视图-控制器&#xff09;设计模式的一部分&#xff0c;用于将数据模型和界面视图分离。 以下是一些QTableView的主要特点和功能&#xff1a; 1. 显示表格数据&#xff1a; QTa…

CPU 伪共享是如何发生的?又该如何避免?

CPU 如何读写数据的&#xff1f; 先来认识一下 CPU 的架构 一个 CPU 里通常会有多个 CPU 核心&#xff0c;并且每个 CPU 核心都有自己的 L1 Cache 和 L2 Cache&#xff0c;而 L1 Cache 通常分为&#xff08;数据缓存&#xff09;和&#xff08;指令缓存&#xff09;&#xff0…

空间曲线的参数方程

空间曲线的参数方程 二维直线 经过一点 P ( x 0 &#xff0c; y 0 ) P(x_0&#xff0c;y_0) P(x0​&#xff0c;y0​)的方向向量为 n ( c o s θ &#xff0c; s i n θ ) n(cos\theta&#xff0c;sin\theta) n(cosθ&#xff0c;sinθ)的直线参数方程为&#xff1a; [ x y …

如何创建一个自己的sphinx文档网站

文章目录 前言一、操作步骤1.安装anaconda2.启动python3.8环境3.安装Sphinx4.创建文件夹5.初始化环境6. 编译7.文件夹搭查看8.搭建nginx查看8. 更换主题9.错误修复10.这里提供两个模板1.Demo_md2.Demo_rst前言 最近看到公司的文档中心,突然想起,为什么不为自己创建一个文档中…

maven依赖,继承

依赖的范围 compile引入的依赖 对main目录下的代码有没有效&#xff0c;main目录下的代码能不能用compile引入的依赖中的类等 以test引入的依赖&#xff0c;在main中是否可以使用 provided&#xff08;已提供&#xff09;&#xff0c;有了就不要带到服务器上&#xff0c;打包…

OLED透明屏原彩优势和特点解析:开创显示技术新时代

OLED透明屏 原彩作为一项领先的显示技术&#xff0c;正以其卓越的性能和创新的设计特点引起广泛关注。 本文将通过深入探讨OLED透明屏 原彩的优势和特点、应用领域、技术发展以及未来前景等方面内容&#xff0c;并结合具体数据、报告和行业动态&#xff0c;为读者提供专业可信…

Dubbo 接口测试原理及多种方法实践总结

1、什么是 Dubbo&#xff1f; Dubbo 最开始是应用于淘宝网&#xff0c;由阿里巴巴开源的一款优秀的高性能服务框架&#xff0c;由 Java 开发&#xff0c;后来贡献给了 Apache 开源基金会组织。 下面以官网的一个说明来了解一下架构的演变过程&#xff0c;从而了解 Dubbo 的诞…

ClickHouse进阶(八):Clickhouse数据查询-2- Join子句

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…

Unity3D开发流程及注意事项

使用Unity3D开发游戏需要遵循一定的流程和注意事项&#xff0c;以确保项目的顺利进行并获得良好的结果。以下是一般的游戏开发流程以及一些注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 游…

【笔记】软件测试的艺术

软件测试的心理学和经济学 测试是为发现错误而执行程序的过程&#xff0c;所以它是一个破坏性的过程&#xff0c;测试是一个“施虐”的过程。 软件测试的10大原则 1、测试用例需要对预期输出的结果有明确的定义 做这件事的前提是能够提前知晓需求和效果图&#xff0c;如果不…

测评补单成为亚马逊、速卖通等跨境电商趋势:解析需求背后的原因

今天就不分享测评技术知识点了&#xff0c;来聊一聊如今做跨境电商为什么对测评补单有这么大的需求。 如今在跨境电商行业&#xff0c;测评补单的需求日益增长&#xff0c;尽管平台一直对其进行禁止。这主要是出于以下几方面的原因&#xff0c;使得测评越来越成为一种趋势&…

方案展示 | RK3588开发板Linux双摄同显方案

iTOP-RK3588开发板使用手册更新&#xff0c;后续资料会不断更新&#xff0c;不断完善&#xff0c;帮助用户快速入门&#xff0c;大大提升研发速度。 RK3588开发板载4路MIPI CAMERA摄像头接口、MIPI CSI DPHY的4.5Gbps、2.5Gops的MIPI CSI CPHY&#xff0c;四路同时输入&#xf…

每天一个工业通信协议(2)2023.8.28 (CAN协议)

文章目录 参考资料1.CAN协议介绍2.CAN的特点3.CAN的通信单元始终处于错误的三种状态之一4.CAN协议的基本概念5.CAN协议的两种ISO标准的不同6.CAN协议6.1 帧的种类6.2 数据帧6.3 遥控帧6.4 错误帧6.5 过载帧参考资料 瑞萨电子《CAN入门书》 1.CAN协议介绍 答: CAN 是 Contro…

编程学习的方向与赛道的选择没有最优解的

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

超越传统营销:海外网红带货能力的6大关键特质!

随着社交媒体的崛起和全球互联网的普及&#xff0c;海外网红已经成为了商业领域中不可忽视的力量。这些具有强大带货能力的网红不仅仅是广告代言人&#xff0c;更是品牌营销的重要合作伙伴。他们凭借其独特的魅力和行动力&#xff0c;在市场中掀起了一股风潮。社交媒体里网红那…

ChatGPT可以生成Windows密钥

ChatGPT 可以回答许多问题、生成和修改代码&#xff0c;最近还可以生成 Windows 10 和 Windows 11 的许可证密钥。自从 OpenAI 的 ChatGPT 推出以来&#xff0c;人工智能已成为许多用户面临的挑战。 他们不断地试图削弱这种智力&#xff0c;或者想尝试它的局限性和可能性。例如…

国内较好的iPaaS供应商有哪些?

iPaaS是什么 iPaaS&#xff0c;全称Integration Platform as a Service&#xff0c;集成平台即服务。 集成一般说的是系统集成&#xff08;System Integration&#xff09;&#xff0c;通常是指将软件、硬件与通信技术组合起来为用户解决信息处理问题的业务&#xff0c;集成的…

城市小车的优势,用五菱宏光mini,轻松应对城市拥堵与环保挑战。

掌握五菱宏光mini的驾驶技巧&#xff0c;让拥堵不再困扰你 合理利用车辆尺寸&#xff0c;轻松穿梭于城市道路 五菱宏光mini的尺寸小巧&#xff0c;长度不到3米&#xff0c;宽度不到1.5米&#xff0c;让你可以在狭窄的城市街道上轻松穿梭。掌握这一技巧&#xff0c;让你在拥堵…

MySQL 如何避免 RC 隔离级别下的 INSERT 死锁?

本文分析了 INSERT 及其变种&#xff08;REPLACE/INSERT ON DUPLICATE KEY UPDATE&#xff09;的几个场景的死锁及如何避免。 作者&#xff1a;张洛丹&#xff0c;DBA 数据库技术爱好者~ 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编…

Python类的方法

Python类的方法主要分为实例方法、类方法和静态方法三种。 1 实例方法 以self作为第一个参数的方法&#xff0c;就是类的实例方法。该方法由类的实例调用&#xff0c;Python会把调用该方法的实例对象传递给self。 如下代码定义了一个名为A的类。 class A:def __init__(self…