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

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

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

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

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

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

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

要点:不要在小部件内创建匿名函数来编写业务逻辑。相反,甚至可以将 onTap 传递到小部件之外,并让父级处理它。m2z28资讯网——每日最新资讯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 事件的情况下存在。m2z28资讯网——每日最新资讯28at.com

要点:使来自小部件的所有事件函数都可以为 null。m2z28资讯网——每日最新资讯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 事件函数。银行应用程序中的小部件应该不知道它属于银行应用程序,并且只有足够的数据来绘制它自己和它的孩子。换句话说,一个小部件应该是美丽而愚蠢的。m2z28资讯网——每日最新资讯28at.com

要点:命名 UI 事件函数以指示事件,而不是指示底层业务逻辑。将这样的函数命名为 onTapRegisterButton() 比 register() 更好。m2z28资讯网——每日最新资讯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 或名称。这是一个很好的做法,可以在将来业务逻辑扩展或更改时尽量减少代码更改。m2z28资讯网——每日最新资讯28at.com

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

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

规则 5:始终指定 HitTestBehavior

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

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

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

原文:https://chtgupta.medium.com/beyond-the-basics-5-rules-for-ontap-events-in-flutter-to-outshine-others-e5ab0fa8622m2z28资讯网——每日最新资讯28at.com

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

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

上一篇: 开箱即用的前端图片压缩方案

下一篇: 【技术革命】JDK21虚拟线程来袭,让系统的吞吐量翻倍!

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人“珍藏”是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    7月7日消息,近日有微博网友@长三角行健者爆料称,据经销商集团反馈,小米汽车目前已经开始了交付中心的筛选工作,要求候选场地至少有120个车位,建筑不能低
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 世界人工智能大会国际日开幕式活动在世博展览馆开启

    30日上午,世界人工智能大会国际日开幕式活动在世博展览馆开启,聚集国际城市代表、重量级院士专家、国际创新企业代表,共同打造人工智能交流平台。上海市副市
Top