足够好用,FFloat

发表于 3年以前  | 总阅读数:1597 次

FWidget 用心提供精致的组件,助您构建精美的应用。

你好开发者,来见识一下,这是由我们精心为开发者烘培 的全新组件,F~~~Float

FFloat 是由 【阿里巴巴-飞猪-FliggyMobile 技术团队】(https://github.com/Fliggy-Mobile) 开发维护的 FWidget 系列组件中的第 5 个成员。

正如我们的 Slogan"用心提供精致的组件,助您构建精美的应用。"

我们正在用心的尝试雕琢出一套好用的精美的组件,来帮助开发者们更易构建出 Beautiful App

在过去的几周中,我们已经陆续向社区开放了 4 个精致的基础功能性组件,收到了来自开发者们投出的 333Star(https://github.com/Fliggy-Mobile),非常感谢开发者们的认可和支持 。

如今,我们迎来了 FWidget 的第 5 个成员, FFloat

FFloat 的诞生,来源于我们日常开发中一直棘手的 浮动元素 问题。

我们几乎很难计算出,在 FFloat 出现以前,当需要开发如下交互元素时,我们的焦虑能让我们喝掉几罐[可口可乐]

当然,就这个例子而言,算是十分简单的 浮动元素 示例了。

FFloat 的出现,将会让一切的难题都迎刃而解。

现在,时间点将会分为两个部分, FFloat 出现前FFloat 出现后

FFloat 在化简为繁方面是天生的好手。

这得益于我们在 FFloat 内部进行了大量繁琐的逻辑处理和计算,使得开发者在使用时,能够以最自然的,最简单的方式去 还原创造

✨ 特性

这是 FFloat 为开发者们带来的一些特性:

  • 同时支持 锚点模式绝对模式 双定位模式
  • 够灵活,够简单的 位置控制
  • 支持配置 背景遮罩
  • 自带 精美动效 ,能够根据位置关系智能调整
  • 丰富的 装饰三角 配置
  • 外层容器支持 圆角、边框、渐变、阴影 等诸多配置
  • 便捷的 显示/隐藏控制

传送区

【传送门:FFloat Github 主页 - 感谢您的 Star 】

https://github.com/Fliggy-Mobile/ffloat

【传送门:FFloat 文档】

https://pub.dev/documentation/ffloat/latest/ffloat/ffloat-library.html

基于锚点元素的位置控制

足够简单,足够有效

FFloat(
  /// 浮动元素内容
  (setter) => createContent(),
  alignment: _alignment,
  margin: _margin

  /// 锚点元素
  anchor: buildAnchor(),
)

FFloat 最不可思议的地方在于,开发者只需要通过 anchor 参数提供一个锚点, FFloat 就能知道如何在正确的地方显示 浮动元素

而且 FFloat 不会对原本的锚点元素及可见视图树结构产生任何不利影响,这很神奇吧!

对于所要展示的内容, FFloat 通过 FloatBuilder 函数来构建。开发者只需要在该函数中返回需要展示的浮动内容,剩下的事情, FFloat 会处理好。

此外,在 FloatBuilder 函数中,开发者能够通过函数的参数获取到刷新函数 StateSetter ,这样可以将刷新范围限制在浮动内容区域中,而不是去刷新整个页面区域。这对于构建一个精美丝滑的应用来说,至关重要。

FFloat(
  (setter){
    return FButton(text: _text, 
      onClick: (){

        /// 更新浮动内容
        setter((){
          updateText();
        })            
      });
  },
  ...
)

如果对浮动元素出现的位置不满意, FFloat 提供了 alignmentmargin 参数,使开发者能够以难以置信的简单的方式调整浮动元素的位置,直到满意为止。

alignment 提供了十分全面的相对位置选项:

类型: topLeft 说明: 在锚点元素【上方】,且【左边缘】与锚点元素对齐

类型: topCenter 说明: 在锚点元素【上方】,且水平居中

类型: topRight 说明: 在锚点元素【上方】,且【右边缘】与锚点元素对齐

类型: bottomLeft 说明: 在锚点元素【下方】,且【左边缘】与锚点元素对齐

类型: bottomCenter 说明: 在锚点元素【下方】,且水平居中

类型: bottomRight 说明: 在锚点元素【下方】,且【右边缘】与锚点元素对齐

类型: leftTop 说明: 在锚点元素【左侧】,且【上边缘】与锚点元素对齐

类型: leftCenter 说明: 在锚点元素【左侧】,且垂直居中

类型: leftBottom 说明: 在锚点元素【左侧】,且【下边缘】与锚点元素对齐

类型: rightTop 说明: 在锚点元素【右侧】,且【上边缘】与锚点元素对齐

类型: rightCenter 说明: 在锚点元素【右侧】,且垂直居中

类型: rightBottom 说明: 在锚点元素【右侧】,且【下边缘】与锚点元素对齐

在此基础上,margin 参数能够让开发者基于当前的相对位置关系,进一步微调浮动元素的偏移量。

在过去,要实现这些效果,需要耗费开发者大量的精力去处理复杂的位置关系逻辑,编写不同的算法以确定浮动元素的最终位置。

而现在,一切就是这么简单 。

基于绝对坐标的位置控制

多一种模式,多一种可能

GestureDetector(
  onPanDown: (details) {
    FFloat(
      (setter) => createContent(),
      autoDismissDuration: Duration(milliseconds: 2000),
      alignment: _alignment,
      canTouchOutside: false,

      /// 通过绝对坐标配置浮动元素位置
      location: Offset(details.globalPosition.dx, details.globalPosition.dy),
    ).show(context); /// 显示
  },
  child: FSuper(...),
)

在一些情况下,我们的浮动元素不需要基于一个锚点出现,而是希望它出现在一个确定的位置。

如果开发者知道一个这样的位置的话,就可以使用 location 参数来设置浮动元素的位置。

此时,开发者完全不需要将 FFloat 放到视图树中包裹任何的组件元素。这意味着开发者可以随时随地,在任何回调或者函数中创建一个浮动元素。

通过 FFloat.show(context)FFloat.dismiss(),开发者可以随时轻松的控制浮动元素 显示/隐藏

FFloat 的其它一切配置都依旧有效。

背景遮罩及动效

将效果丰富,将实现简化

# 背景遮罩演示
FFloat(
  (_) => buildSearchWidget(),
  color: Colors.black.withOpacity(0.95),

  /// 配置背景遮罩颜色
  backgroundColor: Colors.black26,
  corner: FFloatCorner.all(20),
  margin: EdgeInsets.only(bottom: 10, left: 10),
  anchor: buildAnchor(),
  alignment: FFloatAlignment.topRight, 

  /// 配置点击非浮动元素区域是否隐藏
  canTouchOutside: false,
)

FFloat 中,只需通过 backgroundColor 一个参数,就能实现浮动元素出现时的背景遮罩效果。

默认情况下,当浮动元素出现时,会拦截所有事件,开发者可以通过 canTouchOutside 这一参数关闭该模式。

# 动效配置
FFloat(
  (_) => FSuper(text: "Surprise !"),
  anchor: buildAnchor(),

  /// 当该参数不为 null 时,FFloat 会在指定时长后自动消失
  autoDismissDuration: Duration(milliseconds: 2000),

  /// 配置动效时长
  animDuration: Duration(milliseconds: 800),
),

FFloat 自带精美的交互动效,根据浮动元素位置的不同,动效能够自动的进行调整,以呈现最优雅的视觉效果。

通过 animDuration 参数,开发者可以自行定义动效时长。当然,如果不需要任何动效,只需传入 null 即可。

在很多场景中,我们往往希望一个浮动元素出现后,能够在持续一段时间后自动消失。

通常,要实现这样的效果,开发者需要创建独立的计时器,以及状态机,在特殊的状况下,还需要额外的进行状态逻辑校验,以确保这一效果天衣无缝。需要考虑的逻辑实在太多。

FFloat 能够让开发者只需通过 autoDismissDuration 一个参数,就能够实现这一功能。

装饰三角

省力,省心,省内存

FFloat(
  (setter) => buildContent(),
  anchor: buildAnchor(),

  /// 配置装饰三角的相对位置
  triangleAlignment: TriangleAlignment.start,

  /// 配置装饰三角的相对偏移量
  triangleOffset: Offset(10, 10),

  /// 配置装饰三角的宽
  triangleWidth: 20,

  /// 配置装饰三角的高
  triangleHeight: 15,
)

FFloat 出现之前, Tooltips 风格的浮动元素的实现往往过于繁琐。

而真正难住开发者的却是浮动元素上的一个 小三角 。相信经验丰富的开发者一定知道这背后的心酸。

由于平台系统没有提供三角或带有三角的组件支持,开发者不得不在使用 Canvas 绘制或使用图片替代的方案中作出抉择。

前者灵活高效,但实现十分繁琐,这可不仅仅是在 Canvasdraw 个三角形那么简单,还需要考虑与真正的浮动元素的融合问题。

后者实现方便,但对于不同颜色,不同位置、不同尺寸的三角,开发者需要为它们配置多套图片,内存也会随时间逐步累加。但考虑到开发成本和效率,开发者们往往都会选择这种实现方式。

FFloat 彻底解决了这些问题,兼具高效与灵活,甚至比开发者们的期望更进一步。

在上面的 Code 演示中,展示了 FFloat 在小三角方面的常用配置,包括简单的相对位置关系、尺寸、及可微调的位置偏移。

现在,开发者可以清理掉应用程序中所有类似的图片资源了 。

除了解决过去的问题, FFloat 更进一步的能够根据浮动元素以及锚点元素的相对位置关系,自动调整自身的三角形到合理的位置。这一过程,对于开发者而言是毫无感知的。

FFloat(
  (setter) => buildContent(),

  /// 配置是否隐藏装饰三角
  hideTriangle: true,
  anchor: buildAnchor(),
),

默认情况下,FFloat 会展示装饰三角。如果不需要,开发者只用配置 hideTriangle: true,就可以将它隐藏。

圆角 & 边框

虽然简单,但不简陋

FFloat(
  (setter) => buildContent(),
  anchor: buildAnchor(),
  alignment: FFloatAlignment.bottomLeft,
  hideTriangle: true,

  /// 加上圆角
  corner: FFloatCorner.all(6),

  /// 加上边框
  strokeColor: mainShadowColor,
  strokeWidth: 1.0,
)

在上面的例子 中,我们能够清晰的看到,一个漂亮的带边框的圆角浮层,构建起来如此的简单。

FFloat 提供了 FWidget 系列组件一脉相承的,简单的设置圆角的方式,仅仅通过一个简单的 corner 参数就能灵活的配置圆角效果。

corner 配套的 cornerStyle 属性,允许开发者随时切换圆角的风格(圆角 or 斜切角)。

对于 FWidget 的老粉而言,相信已经知道,我们为组件配置边框效果,仅仅需要通过 strokeWidthstrokeColor 这样两个简单的属性即可。

我们的初心始终是,帮助开发者更简单、更高效的构建出精美的应用。

渐变 & 阴影

要简洁,也要出彩

FFloat(
  (setter) => buildContent(),
  anchor: buildAnchor(),
  hideTriangle: true,
  alignment: FFloatAlignment.bottomCenter,

  /// 配置渐变
  gradient: SweepGradient(
    colors: [
      Color(0xffE271C0),
      Color(0xffC671EB),
      Color(0xff7673F3),
      Color(0xff8BEBEF),
      Color(0xff93FCA8),
      Color(0xff94FC9D),
      Color(0xffEDF980),
      Color(0xffF0C479),
      Color(0xffE07E77),
    ],
  ),

  /// 添加阴影
  shadowColor: Colors.black38,
  shadowBlur: 3,
  shadowOffset: Offset(3, 2),
)

是的,FFloat 在兼具了诸多能力之后,仍然对渐变进行了支持。

仅仅是通过一个简单的 gradient 属性,开发者就能获得惊艳的渐变效果。

此外,作为一个现代化的组件,FFloat 当然会对阴影作出支持。

开发者只需要配置 shadowColor 参数就能获得一个基础的阴影效果。

如果想要更进一步对阴影作出调整的,可以使用 shadowBlurshadowOffset 参数来完成。

作者:CoorChice 链接:https://juejin.im/post/5ec17d6a5188256d7674b942

 相关推荐

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

发布于:8月以前  |  808次阅读  |  详细内容 »

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

发布于:8月以前  |  770次阅读  |  详细内容 »

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

发布于:7月以前  |  756次阅读  |  详细内容 »

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

发布于:8月以前  |  648次阅读  |  详细内容 »

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

发布于:8月以前  |  589次阅读  |  详细内容 »

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

发布于:8月以前  |  449次阅读  |  详细内容 »

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

发布于:8月以前  |  446次阅读  |  详细内容 »

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

发布于:8月以前  |  445次阅读  |  详细内容 »

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

发布于:8月以前  |  444次阅读  |  详细内容 »

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

发布于:8月以前  |  442次阅读  |  详细内容 »

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

发布于:8月以前  |  441次阅读  |  详细内容 »

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

发布于:8月以前  |  437次阅读  |  详细内容 »

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

发布于:8月以前  |  430次阅读  |  详细内容 »

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

发布于:8月以前  |  428次阅读  |  详细内容 »

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

发布于:8月以前  |  423次阅读  |  详细内容 »

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

发布于:8月以前  |  423次阅读  |  详细内容 »

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

发布于:8月以前  |  420次阅读  |  详细内容 »

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

发布于:8月以前  |  411次阅读  |  详细内容 »

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

发布于:8月以前  |  406次阅读  |  详细内容 »

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

发布于:8月以前  |  398次阅读  |  详细内容 »
 相关文章
如何有效定位Flutter内存问题? 3年以前  |  14893次阅读
Flutter的手势GestureDetector分析详解 4年以前  |  10999次阅读
Flutter插件详解及其发布插件 4年以前  |  10802次阅读
在Flutter中添加资源和图片 5年以前  |  8028次阅读
 目录