現(xiàn)象:在PageView TabView等可橫劃組件中,WebView的垂直手勢(shì)不靈敏。
創(chuàng)新互聯(lián)專注于雜多企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站開發(fā)。雜多網(wǎng)站建設(shè)公司,為雜多等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
解決方案:
指定WebView只處理垂直手勢(shì)。
參考鏈接:
??在最近做的一個(gè)Flutter項(xiàng)目中,需要用到手勢(shì)、指紋解鎖,這種需求在原生應(yīng)用中非常常見,但Flutter中手勢(shì)密碼解鎖現(xiàn)有庫(kù)比較少、官方也僅提供有一個(gè) local_auth 指紋庫(kù),所以就自己寫了個(gè)手勢(shì)庫(kù)。
??其實(shí)實(shí)現(xiàn)這個(gè)自定義的手勢(shì)控件有很多思路,首先想到的是,要在View中創(chuàng)建9個(gè)圓,那么使用GridView再合適不過了,但是經(jīng)過嘗試,放棄了,這會(huì)使交互跟邏輯變的更加復(fù)雜,所以還是選擇直接繼承Widget,自己處理邏輯與手勢(shì),那么下面就是需要處理的邏輯:
由于官方插件庫(kù)已經(jīng)提供有 local_auth 庫(kù),在這里就不大贅述,具體使用就參考Flutter官方local_auth插件庫(kù)。
??如果在使用過程遇到問題,歡迎下方留言交流。
?? Pub 庫(kù)地址
相信在方法當(dāng)中,我們都會(huì)遇到讓組件有拖拽效果的需求。在 Flutter 當(dāng)中怎么實(shí)現(xiàn)拖拽需求呢?這篇博客分享關(guān)于 拖拽手勢(shì) 的知識(shí),希望對(duì)看文章的小伙伴有所啟發(fā)。
拖拽手勢(shì) 是指用戶在長(zhǎng)按屏幕的時(shí)候,移動(dòng)手指的手勢(shì)。會(huì)細(xì)分成:
我們可以理解成用戶在觸碰到屏幕的那一刻處于 按下 ,之后有可能觸發(fā) 移動(dòng) 手勢(shì),最后 抬起 離開屏幕,這就是完整的手勢(shì)。
在 GestureDetector 當(dāng)中,拖拽手勢(shì)分為2種:
描述了屏幕上指針(觸摸、鼠標(biāo)、觸控筆)的位置和移動(dòng)。
Flutter中可以使用Listener(功能性組件)來(lái)監(jiān)聽原始觸摸事件
例1
例2
例3
忽略PointerEvent
手勢(shì): 描述由一個(gè)或多個(gè)指針移動(dòng)組成的語(yǔ)義動(dòng)作,如拖動(dòng)、縮放、雙擊等。
Material大多數(shù)widget已經(jīng)對(duì)tap或手勢(shì)做出了響應(yīng)。 例如 IconButton和 FlatButton 響應(yīng)單擊,ListView響應(yīng)滑動(dòng)事件觸發(fā)滾動(dòng)。
用于手勢(shì)識(shí)別的功能性組件,通過它可以來(lái)識(shí)別各種手勢(shì)。
例(單擊)
例(添加Material觸摸水波效果 InkWell組件)
例(滑動(dòng)關(guān)閉 Dismissable組件)
例(單擊、雙擊、長(zhǎng)按)
例(滑動(dòng))
例(掃動(dòng)---單一方向)
例(縮放)
GestureRecognizer是一個(gè)抽象類。
一種手勢(shì)的識(shí)別器對(duì)應(yīng)一個(gè)GestureRecognizer的子類。
例
由于手勢(shì)競(jìng)爭(zhēng)最終只有一個(gè)勝出者,所以,當(dāng)有多個(gè)手勢(shì)識(shí)別器時(shí),可能會(huì)產(chǎn)生沖突。
例
例
在APP中經(jīng)常會(huì)需要一個(gè)廣播機(jī)制,用以跨頁(yè)面通知。比如一個(gè)需要登錄的APP中,頁(yè)面會(huì)關(guān)注用戶登錄或注銷事件,來(lái)進(jìn)行一些狀態(tài)更新。
這時(shí)候,一個(gè)事件總線便會(huì)非常有用,事件總線通常實(shí)現(xiàn)了訂閱者模式,訂閱者模式包含發(fā)布者和訂閱者兩種角色,可以通過事件總線來(lái)觸發(fā)事件和監(jiān)聽事件。
對(duì)于一些簡(jiǎn)單的應(yīng)用,事件總線是足以滿足業(yè)務(wù)需求的,如果決定使用狀態(tài)管理包的話,一定要想清楚APP是否真的有必要使用它,防止“化簡(jiǎn)為繁”、過度設(shè)計(jì)。
例
在widget樹中,每一個(gè)節(jié)點(diǎn)都可以分發(fā)通知,通知會(huì)沿著當(dāng)前節(jié)點(diǎn)向上傳遞,所有父節(jié)點(diǎn)都可以通過NotificationListener來(lái)監(jiān)聽通知。
Flutter中將這種由子向父的傳遞通知的機(jī)制稱為通知冒泡(Notification Bubbling)。
通知冒泡和用戶觸摸事件冒泡是相似的,但有一點(diǎn)不同:通知冒泡可以中止,但用戶觸摸事件不行。
通知冒泡和Web開發(fā)中瀏覽器事件冒泡原理是相似的,都是事件從出發(fā)源逐層向上傳遞,可以在上層節(jié)點(diǎn)任意位置來(lái)監(jiān)聽通知/事件,也可以終止冒泡過程,終止冒泡后,通知將不會(huì)再向上傳遞。
Flutter的UI框架實(shí)現(xiàn)中,除了在可滾動(dòng)組件在滾動(dòng)過程中會(huì)發(fā)出ScrollNotification之外,還有一些其它的通知,如SizeChangedLayoutNotification、KeepAliveNotification 、LayoutChangedNotification等,F(xiàn)lutter正是通過這種通知機(jī)制來(lái)使父元素可以在一些特定時(shí)機(jī)來(lái)做一些事情。
例
例
例
阻止冒泡
通知冒泡原理