成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

onTap 就是這樣一個微小但豐富的東西——我們在每個屏幕上都使用它。這純粹是關于那些 onTap 事件:該做和不該做。

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

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

要點:不要在小部件內創建匿名函數來編寫業務邏輯。相反,甚至可以將 onTap 傳遞到小部件之外,并讓父級處理它。

// DON'T

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) => GestureDetector(
    onTap: () {
      debugPrint('MyWidget onTap called');
      fetchFromServer();
    },
    child: Container(
      width: 100,
      height: 100,
      color: Colors.orange,
    ),
  );
}
// DO

class 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 事件的情況下存在。

要點:使來自小部件的所有事件函數都可以為 null。

// DON'T

class MyWidget extends StatelessWidget {

  const MyWidget({required this.onTap});

  final void Function() onTap;

  @override
  Widget build(BuildContext context) => GestureDetector(
    onTap: onTap,
    child: Container(
      ...
    ),
  );
}
// DO

class MyWidget extends StatelessWidget {

  const MyWidget({this.onTap});

  final void Function()? onTap;

  @override
  Widget build(BuildContext context) => GestureDetector(
    onTap: onTap,
    child: Container(
      ...
    ),
  );
}

規則 3:UI 必須對邏輯一無所知,即使是指示性意義上的也不行

即使在使用最佳實踐之后,一個常見的錯誤是命名指示業務邏輯的 UI 事件函數。銀行應用程序中的小部件應該不知道它屬于銀行應用程序,并且只有足夠的數據來繪制它自己和它的孩子。換句話說,一個小部件應該是美麗而愚蠢的。

要點:命名 UI 事件函數以指示事件,而不是指示底層業務邏輯。將這樣的函數命名為 onTapRegisterButton() 比 register() 更好。

// DON'T

class MyScreen extends StatelessWidget {

  ...

  @override
  Widget build(BuildContext context) => Scaffold(
    body: MyWidget(
      onTap: controller.fetchData,
    );
  );
}
// DO

class MyScreen extends StatelessWidget {

  ...

  @override
  Widget build(BuildContext context) => Scaffold(
    body: MyWidget(
      onTap: controller.onTapMyWidget,
    );
  );
}

class MyScreenController {

  ...

  void onTapMyWidget() {
    _fetchData()
  }

  void _fetchData() {
    ...
  }

}

規則 4:盡可能傳遞模型

這一點不僅限于 UI,也適用于所有函數。每當您需要傳遞一些數據作為參數時,請盡量傳遞整個模型,而不僅僅是一個 ID 或名稱。這是一個很好的做法,可以在將來業務邏輯擴展或更改時盡量減少代碼更改。

要點:將模型作為參數而不是 ID 傳遞給函數。

// DON'T

void onTapMyWidget(int subjectId) {
  ...
}
// DO

void onTapMyWidget(Subject subject) {
  ...
}

規則 5:始終指定 HitTestBehavior

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

要點:通過指定小部件的點擊行為來絕對控制小部件的子部件。

class MyWidget extends StatelessWidget {

  ...

  @override
  Widget build(BuildContext context) => GestureDetector(
    onTap: onTap,
    behavior: HitTestBehavior.opaque,
    child: Container(
      ...
    ),
  );
}
責任編輯:華軒 來源: 獨立開發者張張
相關推薦

2023-11-04 12:08:40

Flutter事件

2014-02-24 13:55:47

簡歷簡歷技巧

2021-08-17 07:15:16

Github開源項目

2024-06-20 09:44:19

Vars()函數Python工具

2016-05-12 13:51:05

IBM大型機混合云

2009-04-13 10:52:03

視頻面試求職技巧

2012-08-08 10:00:17

面試技術

2015-03-06 09:21:41

APP

2015-08-06 10:03:03

云計算云計算認證云遷移

2018-06-03 00:16:36

阿里巴巴技術面試

2013-03-25 16:39:42

華為BYOD解決方案

2013-08-27 15:45:37

App應用商店ASO應用商店優化App營銷推廣

2020-03-13 13:45:41

前端面試Web

2011-12-27 15:02:37

云計算

2009-09-10 09:48:25

IT職場

2014-09-02 15:25:10

國產操作系統

2012-04-28 14:29:36

App Store沖榜策略排行榜規則

2015-10-27 10:13:42

初創公司脫穎而出

2016-12-16 18:40:08

移動開發蘋果應用

2017-05-02 14:40:20

程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品免费在线观看 | 成人片免费看 | 欧美区日韩区 | 国产成人精品免费视频大全最热 | 亚洲欧美综合精品久久成人 | 天天想天天干 | 欧美日韩亚洲系列 | 夜夜骑av | 国产精品永久免费 | 国产精品视频网 | 97色综合 | wwwxxx日本在线观看 | 久久亚洲欧美日韩精品专区 | 久久午夜国产精品www忘忧草 | 亚洲一区二区三区在线观看免费 | 欧美aaa级| 国产精品久久久久久久久久久久久 | 天天av天天好逼 | 亚洲一区二区三区四区在线观看 | 欧美91| 免费成人高清在线视频 | 亚洲国产精品suv | 女朋友的闺蜜3韩国三级 | 91在线看网站| 日韩欧美不卡 | 中文字幕成人av | 国产成人免费在线 | 玖玖爱365| 99精品网 | 国产午夜精品一区二区三区嫩草 | 成人在线视频看看 | 天天天操操操 | 青青草社区| 免费国产网站 | 6080亚洲精品一区二区 | 亚州视频在线 | 中文字幕日韩欧美一区二区三区 | 日本在线免费视频 | 成人在线播放网址 | 亚洲精品小视频在线观看 | 亚洲精品一区中文字幕乱码 |