在一些計算較為復雜、操作較為耗時或者操作為引起頁面重繪的場景,如果事件觸發(fā)的頻率毫無限制,除了帶來性能上的負擔,還會導致糟糕的用戶體驗。如:根據(jù)輸入框輸入的內(nèi)容向服務端查詢相關(guān)文章,用戶多次點擊收藏按鈕……

10余年的五峰網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整五峰建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“五峰網(wǎng)站設計”,“五峰網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
在觸發(fā)事件時,不立即執(zhí)行目標操作,而是給出一個延遲的時間,在該時間范圍內(nèi)如果再次觸發(fā)了事件,則重置延遲時間,直到延遲時間結(jié)束才會執(zhí)行目標操作。
如設定延遲時間為500ms,
連續(xù)點擊 收藏 按鈕,停止點擊時才會執(zhí)行”收藏/取消收藏“操作,只會執(zhí)行一次”收藏/取消收藏“操作
在觸發(fā)事件時,立即執(zhí)行目標操作,同時給出一個延遲的時間,在該時間范圍內(nèi)如果再次觸發(fā)了事件,該次事件會被忽略,直到超過該時間范圍后觸發(fā)事件才會被處理。
如設定延遲時間為500ms,
連續(xù)點擊 收藏 按鈕,在第一次點擊時會立即執(zhí)行”收藏/取消收藏“操作,在本次操作執(zhí)行完成前的多次點擊會被忽略,只會執(zhí)行一次”收藏/取消收藏“操作。
部分場景,如收藏等一些按鈕,在連續(xù)多次點擊時,上述方案可以過濾邏輯上的重復問題,但在UI上并沒有做任何處理,比如做禁用樣式、動畫樣式等
在Flutter中我們在 Widget 實現(xiàn)一些手勢交互通常會使用 GestureDetector 裝飾器來實現(xiàn),但是默認情況下, widget 是支持多點觸控,但是在一些特定需求下,我們不需要多點觸控的操作,或者多點觸控反而給一些功能帶來麻煩,而且比較不方便的是,多點觸控無法通過操作 widget 或者 GestureDetector 來屏蔽掉。查閱了官方文檔發(fā)現(xiàn)的這個玩意: RawGestureDetector
大概意思是:一個小部件,用于檢測由給定手勢工廠描述的手勢。對于常用手勢,請使用GestureRecognizer。 RawGestureDetector主要在開發(fā)自己的手勢識別器時很有用。
例如:
我們可以通過RawGestureDetector來自定義手勢。
有時,你可能需要禁用多點觸摸或在Flutter應用程序中點擊小部件。 例如,有一個列表,并且一次只能單擊其中一項。 您不希望用戶同時用三個手指點擊或觸摸并立即選擇三個項。基本上,您要防止用戶多次點擊或多點觸摸。
我們先創(chuàng)建一個簡單的頁面,頁面加載一個 ListView.builder() ,
這個列表上的cell都支持多點觸控,效果圖:
【圖】
Flutter允許在 GestureRecognizer 基類的幫助下創(chuàng)建自定義手勢識別器小部件。 該類已經(jīng)有兩個抽象的實現(xiàn),可以實現(xiàn)多次輕擊和單次輕擊手勢。
首先創(chuàng)建一個自定義窗口小部件,以使其子窗口小部件只能具有單一觸摸手勢。
在 build() 方法中,我們將返回僅支持單點觸摸手勢的手勢檢測器小部件。 因此,我們?yōu)榇藙?chuàng)建另一個名為 _SingleTouchRecognizer 的類
現(xiàn)在我們回到我們的 SingleTouchRecognizerWidget 中,通過 RawGestureDetector 裝飾器來定義我們剛才創(chuàng)建的單擊手勢檢測器:
現(xiàn)在, build() 方法返回了一個 RawGestureDetector ,該 RawGestureDetector 處理 _SingleTouchRecognizer 類中的手勢。接下來,我們需要在識別器類中實現(xiàn)這些方法。我們首先覆蓋 GestureRecognizer 的 addAllowedPointer 方法。
在這里, startTrackingPointer 方法注冊了將由識別器處理的相關(guān)事件。 然后, resolve() 負責確保是否允許繼續(xù)進行觸摸事件。
如果我們傳入 GestureDisposition.rejected ,則當前的觸摸事件無法處理。 因此,此觸摸事件將被傳遞并允許其繼續(xù)。 但是,如果傳遞了 GestureDisposition.accepted ,則將解析觸摸事件,并且不會再調(diào)用其他事件。
通過handleEvent函數(shù)重置控制變量_p的值。
這樣就完成了_SingleTouchRecognizer類的實現(xiàn)。
現(xiàn)在,只需要將該 Widget 包裹在想要支持單點觸控的 widget 外層即可。
參考文獻:
disable-multi-touch-on-a-widget-in-flutter
api.flutter.dev
在開發(fā)中按鈕如果被多次點擊,會觸發(fā)多次事件,想要封裝一個按鈕能夠在短時間內(nèi)禁止多次點擊。
使用延時方法 改變 判斷條件 來達到此目的。
demo地址
名稱欄目:flutter禁止點擊,flutter停止維護
本文來源:http://chinadenli.net/article17/dsehogj.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、網(wǎng)站收錄、網(wǎng)站營銷、移動網(wǎng)站建設、App開發(fā)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)