日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

超越基礎:Flutter 中 onTap 事件的 5 條規則讓你脫穎而出

來源: 責編: 時間:2023-11-04 23:04:45 345觀看
導讀小事情決定了你的熟練程度,這些小細節的有趣之處在于它們的豐富性。您將在代碼庫中的數百個位置遇到 onTap 事件。增強它們可以對代碼的可維護性和最終用戶體驗產生重大的積極影響。onTap 就是這樣一個微小但豐富的東

小事情決定了你的熟練程度,這些小細節的有趣之處在于它們的豐富性。您將在代碼庫中的數百個位置遇到 onTap 事件。增強它們可以對代碼的可維護性和最終用戶體驗產生重大的積極影響。sph28資訊網——每日最新資訊28at.com

onTap 就是這樣一個微小但豐富的東西——我們在每個屏幕上都使用它。這純粹是關于那些 onTap 事件:該做和不該做。sph28資訊網——每日最新資訊28at.com

規則 1:小部件不應實現 onTap 邏輯

顧名思義,小部件是在屏幕上繪制的一塊 UI,它應該對業務邏輯一無所知。如果需要,它可以將事件傳遞給其父級。做到這一點的最佳方法是使用函數作為構造函數參數。sph28資訊網——每日最新資訊28at.com

要點:不要在小部件內創建匿名函數來編寫業務邏輯。相反,甚至可以將 onTap 傳遞到小部件之外,并讓父級處理它。sph28資訊網——每日最新資訊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 事件的情況下存在。sph28資訊網——每日最新資訊28at.com

要點:使來自小部件的所有事件函數都可以為 null。sph28資訊網——每日最新資訊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 事件函數。銀行應用程序中的小部件應該不知道它屬于銀行應用程序,并且只有足夠的數據來繪制它自己和它的孩子。換句話說,一個小部件應該是美麗而愚蠢的。sph28資訊網——每日最新資訊28at.com

要點:命名 UI 事件函數以指示事件,而不是指示底層業務邏輯。將這樣的函數命名為 onTapRegisterButton() 比 register() 更好。sph28資訊網——每日最新資訊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 或名稱。這是一個很好的做法,可以在將來業務邏輯擴展或更改時盡量減少代碼更改。sph28資訊網——每日最新資訊28at.com

要點:將模型作為參數而不是 ID 傳遞給函數。sph28資訊網——每日最新資訊28at.com

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

規則 5:始終指定 HitTestBehavior

使用 GestureDetector 進行點擊時,不要忘記將 behavior 添加到您的小部件中。此屬性指定點擊(點擊)如何傳播到子窗口小部件。在大多數情況下,您將使用 HitTestBehavior.opaque ,但我建議您應該查看 flutter.dev 上的簡短描述以了解情況。sph28資訊網——每日最新資訊28at.com

要點:通過指定小部件的點擊行為來絕對控制小部件的子部件。sph28資訊網——每日最新資訊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-e5ab0fa8622sph28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-16936-0.html超越基礎:Flutter 中 onTap 事件的 5 條規則讓你脫穎而出

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 開箱即用的前端圖片壓縮方案

下一篇: 【技術革命】JDK21虛擬線程來襲,讓系統的吞吐量翻倍!

標簽:
  • 熱門焦點
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網課的原因激活了平板市場,如今網課的時代已經過去,大家的生活都恢復到了正軌,這也就意味著,真正考驗平板電腦生存的環境來了。也就是面對著這種殘酷的
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態工廠方法模式,不屬于GoF 23種設計
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業用途。(幾小時前,swyy發現它已從LLaMA 2更名為Lla
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對“勢”的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 信通院:小米、華為等11家應用商店基本完成APP簽名及驗簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機助手、百度手機助手、應用寶、豌豆莢和努比亞等9家應用商店,以及抖音和快手2家新型應用分發平
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業從業者、長三角一體化擁護者”的微博用戶 @長三角行健者 發文表示,據經銷商集團反饋,小米汽車目前
Top 主站蜘蛛池模板: 诏安县| 鄂伦春自治旗| 邢台市| 泰和县| 章丘市| 新平| 三都| 惠东县| 邯郸市| 长寿区| 泗水县| 涞源县| 民权县| 甘孜| 五大连池市| 建始县| 临汾市| 宜城市| 连南| 宁波市| 玉溪市| 西乡县| 临汾市| 扎兰屯市| 蕲春县| 尉氏县| 宜丰县| 鄂州市| 涟水县| 榆树市| 双鸭山市| 巴彦淖尔市| 长葛市| 东方市| 登封市| 涿州市| 普安县| 崇仁县| 永善县| 芜湖市| 大方县|