当前位置:首页 > 科技  > 软件

超越基础:Flutter 中 onTap 事件的五条规则让你脱颖而出

来源: 责编: 时间:2023-11-06 17:18:24 363观看
导读小事情决定了你的熟练程度,这些小细节的有趣之处在于它们的丰富性。您将在代码库中的数百个位置遇到 onTap 事件。增强它们可以对代码的可维护性和最终用户体验产生重大的积极影响。onTap 就是这样一个微小但丰富的东

小事情决定了你的熟练程度,这些小细节的有趣之处在于它们的丰富性。您将在代码库中的数百个位置遇到 onTap 事件。增强它们可以对代码的可维护性和最终用户体验产生重大的积极影响。3XP28资讯网——每日最新资讯28at.com

3XP28资讯网——每日最新资讯28at.com

onTap 就是这样一个微小但丰富的东西——我们在每个屏幕上都使用它。这纯粹是关于那些 onTap 事件:该做和不该做。3XP28资讯网——每日最新资讯28at.com

规则 1:小部件不应实现 onTap 逻辑

顾名思义,小部件是在屏幕上绘制的一块 UI,它应该对业务逻辑一无所知。如果需要,它可以将事件传递给其父级。做到这一点的最佳方法是使用函数作为构造函数参数。3XP28资讯网——每日最新资讯28at.com

要点:不要在小部件内创建匿名函数来编写业务逻辑。相反,甚至可以将 onTap 传递到小部件之外,并让父级处理它。3XP28资讯网——每日最新资讯28at.com

// DON'Tclass MyWidget extends StatelessWidget {  @override  Widget build(BuildContext context) => GestureDetector(    onTap: () {      debugPrint('MyWidget onTap called');      fetchFromServer();    },    child: Container(      width: 100,      height: 100,      color: Colors.orange,    ),  );}
// DOclass MyWidget extends StatelessWidget {  const MyWidget({this.onTap});  final void Function()? onTap;  @override  Widget build(BuildContext context) => GestureDetector(    onTap: onTap,    child: Container(      width: 100,      height: 100,      color: Colors.orange,    ),  );}

规则 2:onTap 函数应该可为 null

作为 UI 的一部分,小部件应该是可重用的。不同的用例可能需要也可能不需要其 onTap 功能。因为它存在的主要原因是在屏幕上绘制而不是向其父级或控制器发送事件,所以它应该能够在有或没有 onTap 事件的情况下存在。3XP28资讯网——每日最新资讯28at.com

要点:使来自小部件的所有事件函数都可以为 null。3XP28资讯网——每日最新资讯28at.com

// DON'Tclass MyWidget extends StatelessWidget {  const MyWidget({required this.onTap});  final void Function() onTap;  @override  Widget build(BuildContext context) => GestureDetector(    onTap: onTap,    child: Container(      ...    ),  );}
// DOclass MyWidget extends StatelessWidget {  const MyWidget({this.onTap});  final void Function()? onTap;  @override  Widget build(BuildContext context) => GestureDetector(    onTap: onTap,    child: Container(      ...    ),  );}

规则 3:UI 必须对逻辑一无所知,即使是指示性意义上的也不行

即使在使用最佳实践之后,一个常见的错误是命名指示业务逻辑的 UI 事件函数。银行应用程序中的小部件应该不知道它属于银行应用程序,并且只有足够的数据来绘制它自己和它的孩子。换句话说,一个小部件应该是美丽而愚蠢的。3XP28资讯网——每日最新资讯28at.com

要点:命名 UI 事件函数以指示事件,而不是指示底层业务逻辑。将这样的函数命名为 onTapRegisterButton() 比 register() 更好。3XP28资讯网——每日最新资讯28at.com

// DON'Tclass MyScreen extends StatelessWidget {  ...  @override  Widget build(BuildContext context) => Scaffold(    body: MyWidget(      onTap: controller.fetchData,    );  );}
// DOclass MyScreen extends StatelessWidget {  ...  @override  Widget build(BuildContext context) => Scaffold(    body: MyWidget(      onTap: controller.onTapMyWidget,    );  );}class MyScreenController {  ...  void onTapMyWidget() {    _fetchData()  }  void _fetchData() {    ...  }}

规则 4:尽可能传递模型

这一点不仅限于 UI,也适用于所有函数。每当您需要传递一些数据作为参数时,请尽量传递整个模型,而不仅仅是一个 ID 或名称。这是一个很好的做法,可以在将来业务逻辑扩展或更改时尽量减少代码更改。3XP28资讯网——每日最新资讯28at.com

要点:将模型作为参数而不是 ID 传递给函数。3XP28资讯网——每日最新资讯28at.com

// DON'Tvoid onTapMyWidget(int subjectId) {  ...}
// DOvoid onTapMyWidget(Subject subject) {  ...}

规则 5:始终指定 HitTestBehavior

使用 GestureDetector 进行点击时,不要忘记将 behavior 添加到您的小部件中。此属性指定点击(点击)如何传播到子窗口小部件。在大多数情况下,您将使用 HitTestBehavior.opaque ,但我建议您应该查看 flutter.dev 上的简短描述以了解情况。3XP28资讯网——每日最新资讯28at.com

要点:通过指定小部件的点击行为来绝对控制小部件的子部件。3XP28资讯网——每日最新资讯28at.com

class MyWidget extends StatelessWidget {  ...  @override  Widget build(BuildContext context) => GestureDetector(    onTap: onTap,    behavior: HitTestBehavior.opaque,    child: Container(      ...    ),  );}

本文链接:http://www.28at.com/showinfo-26-17246-0.html超越基础:Flutter 中 onTap 事件的五条规则让你脱颖而出

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: ListUtils技巧大全:提升你的Java列表操作效率

下一篇: JVM 解释和编译指南

标签:
  • 热门焦点
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,“7
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
Top