在Scaffold中加入這一行 resizeToAvoidBottomPadding:false
在鐘祥等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營(yíng)銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,鐘祥網(wǎng)站建設(shè)費(fèi)用合理。
網(wǎng)上有這個(gè)方法SystemChrome.setEnabledSystemUIOverlays([]); 去除頂部和底部,但是在小米4平板上底部還是有灰色的高度,加上上邊的方法就好了?
在Flutter中我們?cè)?Widget 實(shí)現(xiàn)一些手勢(shì)交互通常會(huì)使用 GestureDetector 裝飾器來(lái)實(shí)現(xiàn),但是默認(rèn)情況下, widget 是支持多點(diǎn)觸控,但是在一些特定需求下,我們不需要多點(diǎn)觸控的操作,或者多點(diǎn)觸控反而給一些功能帶來(lái)麻煩,而且比較不方便的是,多點(diǎn)觸控?zé)o法通過(guò)操作 widget 或者 GestureDetector 來(lái)屏蔽掉。查閱了官方文檔發(fā)現(xiàn)的這個(gè)玩意: RawGestureDetector
大概意思是:一個(gè)小部件,用于檢測(cè)由給定手勢(shì)工廠描述的手勢(shì)。對(duì)于常用手勢(shì),請(qǐng)使用GestureRecognizer。 RawGestureDetector主要在開(kāi)發(fā)自己的手勢(shì)識(shí)別器時(shí)很有用。
例如:
我們可以通過(guò)RawGestureDetector來(lái)自定義手勢(shì)。
有時(shí),你可能需要禁用多點(diǎn)觸摸或在Flutter應(yīng)用程序中點(diǎn)擊小部件。 例如,有一個(gè)列表,并且一次只能單擊其中一項(xiàng)。 您不希望用戶同時(shí)用三個(gè)手指點(diǎn)擊或觸摸并立即選擇三個(gè)項(xiàng)?;旧?,您要防止用戶多次點(diǎn)擊或多點(diǎn)觸摸。
我們先創(chuàng)建一個(gè)簡(jiǎn)單的頁(yè)面,頁(yè)面加載一個(gè) ListView.builder() ,
這個(gè)列表上的cell都支持多點(diǎn)觸控,效果圖:
【圖】
Flutter允許在 GestureRecognizer 基類的幫助下創(chuàng)建自定義手勢(shì)識(shí)別器小部件。 該類已經(jīng)有兩個(gè)抽象的實(shí)現(xiàn),可以實(shí)現(xiàn)多次輕擊和單次輕擊手勢(shì)。
首先創(chuàng)建一個(gè)自定義窗口小部件,以使其子窗口小部件只能具有單一觸摸手勢(shì)。
在 build() 方法中,我們將返回僅支持單點(diǎn)觸摸手勢(shì)的手勢(shì)檢測(cè)器小部件。 因此,我們?yōu)榇藙?chuàng)建另一個(gè)名為 _SingleTouchRecognizer 的類
現(xiàn)在我們回到我們的 SingleTouchRecognizerWidget 中,通過(guò) RawGestureDetector 裝飾器來(lái)定義我們剛才創(chuàng)建的單擊手勢(shì)檢測(cè)器:
現(xiàn)在, build() 方法返回了一個(gè) RawGestureDetector ,該 RawGestureDetector 處理 _SingleTouchRecognizer 類中的手勢(shì)。接下來(lái),我們需要在識(shí)別器類中實(shí)現(xiàn)這些方法。我們首先覆蓋 GestureRecognizer 的 addAllowedPointer 方法。
在這里, startTrackingPointer 方法注冊(cè)了將由識(shí)別器處理的相關(guān)事件。 然后, resolve() 負(fù)責(zé)確保是否允許繼續(xù)進(jìn)行觸摸事件。
如果我們傳入 GestureDisposition.rejected ,則當(dāng)前的觸摸事件無(wú)法處理。 因此,此觸摸事件將被傳遞并允許其繼續(xù)。 但是,如果傳遞了 GestureDisposition.accepted ,則將解析觸摸事件,并且不會(huì)再調(diào)用其他事件。
通過(guò)handleEvent函數(shù)重置控制變量_p的值。
這樣就完成了_SingleTouchRecognizer類的實(shí)現(xiàn)。
現(xiàn)在,只需要將該 Widget 包裹在想要支持單點(diǎn)觸控的 widget 外層即可。
參考文獻(xiàn):
disable-multi-touch-on-a-widget-in-flutter
api.flutter.dev
Listener 它是主要的功能是用來(lái)監(jiān)聽(tīng)屏幕觸摸事件,取決于它的子組件區(qū)域范圍,比如按下、移動(dòng)、抬起、取消等操作時(shí)可以添加監(jiān)聽(tīng)。
我們知道 Flutter 組件只有按鈕才會(huì)有事件,那么如果我需要在文字或者某個(gè)容器上添加事件那我就需要借助 Listener
手勢(shì)系列視頻教程地址
Listener 常用于當(dāng)手指滑動(dòng)屏幕時(shí)進(jìn)行隱藏鍵盤或者下拉刷新、上拉加載時(shí)進(jìn)行事件監(jiān)聽(tīng)。
一般在實(shí)際的開(kāi)發(fā)過(guò)程中我們很少會(huì)用到 Listener 來(lái)監(jiān)聽(tīng)手勢(shì),一般都是通過(guò) GestureDetector 來(lái)進(jìn)行監(jiān)聽(tīng)或者使用 MouseRegion 來(lái)監(jiān)聽(tīng)鼠標(biāo)的事件,而 MouseRegion 常用于web開(kāi)發(fā)中, GestureDetector 常用于app。
我們經(jīng)常使用的回調(diào)函數(shù)主要有三個(gè)
我們這里主要是針對(duì) onPointerDown 、 onPointerMove 、 onPointerUp 進(jìn)行演示,因?yàn)槲覀冊(cè)谄綍r(shí)的開(kāi)發(fā)過(guò)程中最常用到的屬性就是這三個(gè),而且其他的屬性也都被廢棄掉了。
我們這里先點(diǎn)擊橙色容器,在點(diǎn)擊一次紅色容器,他們打印的結(jié)果如下。
PointerEvent 是觸摸、手寫筆、鼠標(biāo)事件的基類。
在上文中,我們知道了什么是 Listener 并寫了一個(gè)簡(jiǎn)單的案例,在使用案例的過(guò)程中我們的事件里面都帶了一個(gè) event 參數(shù),而所有的事件最終都是繼承自 PointerEvent ,那我們接下來(lái)看看 event 的參數(shù)有什么作用。
PointerEvent 的屬性非常多,但在我們實(shí)際的開(kāi)發(fā)過(guò)程中很少會(huì)使用到,只有在特定的情景下才會(huì)使用對(duì)應(yīng)的屬性。
如需要做一個(gè)全局懸浮的按鈕我們會(huì)使用到 position
如需要做繪圖軟件我們需要用到 buttons 、 kind 等
所以大家可以根據(jù)實(shí)際的應(yīng)用場(chǎng)景來(lái)使用對(duì)應(yīng)的屬性即可,下面是我對(duì) PointerEvent 的屬性進(jìn)行的一個(gè)詳細(xì)描述。
behavior 屬性,它決定子組件如何響應(yīng)命中測(cè)試,它的值類型為 HitTestBehavior ,這是一個(gè)枚舉類,有三個(gè)枚舉值
對(duì)子組件一個(gè)接一個(gè)的進(jìn)行命中測(cè)試,如果子組件中有測(cè)試通過(guò)的,則當(dāng)前組件通過(guò),這就意味著,如果指針事件作用于子組件上時(shí),其父級(jí)組件也肯定可以收到該事件。
在命中測(cè)試時(shí),將當(dāng)前組件當(dāng)成不透明處理(即使本身是透明的),最終的效果相當(dāng)于當(dāng)前Widget的整個(gè)區(qū)域都是點(diǎn)擊區(qū)域
點(diǎn)擊組件透明區(qū)域時(shí),可以對(duì)自身邊界內(nèi)及底部可視區(qū)域都進(jìn)行命中測(cè)試,這意味著點(diǎn)擊頂部組件透明區(qū)域時(shí),頂部組件和底部組件都可以接收到事件
我們這里演示每次都是先點(diǎn)擊綠色盒子在點(diǎn)擊文字,以便大家能更好的分辨出這三個(gè)屬性的使用區(qū)別
Listener 是 Flutter 中比較重要的功能性組件,它主要的功能是用來(lái)監(jiān)聽(tīng)屏幕觸摸事件,事件回調(diào)可以獲取對(duì)應(yīng)的屬性來(lái)個(gè)性化定制app功能。
在開(kāi)發(fā)中按鈕如果被多次點(diǎn)擊,會(huì)觸發(fā)多次事件,想要封裝一個(gè)按鈕能夠在短時(shí)間內(nèi)禁止多次點(diǎn)擊。
使用延時(shí)方法 改變 判斷條件 來(lái)達(dá)到此目的。
demo地址
Flutter中給我們預(yù)先定義好了一些按鈕控件給我們用,常用的按鈕如下
我們先來(lái)看看MaterialButton中的屬性,可以看到能設(shè)置的屬性還是很多的。
下面我們來(lái)看看常用屬性
而在Android中如果我們要修改按鈕樣式的話,需要通過(guò)selector和Shape等方式進(jìn)行修改,相比較Flutter來(lái)說(shuō)是要麻煩不少的
RaisedButton的構(gòu)造方法如下,由于繼承自MaterialButton,所以MaterialButton中的大多數(shù)屬性這邊都能用,且效果一致,這里就不在贅述了
下面我們來(lái)看一下屬性
接收一個(gè)方法,點(diǎn)擊按鈕時(shí)回調(diào)該方法。如果傳null,則表示按鈕禁用
如下圖所示
按鈕文本控件,一般都是傳一個(gè)Text Widget
按鈕顏色
按鈕的文本顏色
點(diǎn)擊按鈕時(shí)水波紋顏色
高亮顏色,點(diǎn)擊(長(zhǎng)按)按鈕后的顏色
陰影范圍,一般不會(huì)設(shè)置太大
內(nèi)邊距,使用
或者
shape用來(lái)設(shè)置按鈕的形狀,其接收值是ShapeBorder類型,ShapeBorder是一個(gè)抽象類,我們來(lái)看看有哪些實(shí)現(xiàn)類
可以看到,實(shí)現(xiàn)類還是很多的,我們主要來(lái)看看常用的即可。
borderRadius 接收一個(gè)BorderRadius類型的值,常用方法如下
我們可以把borderRadius分為上下左右四個(gè)方向,下面的方法都是對(duì)這四個(gè)方向進(jìn)行設(shè)置,
帶斜角的長(zhǎng)方形邊框
圓形邊框
圓角矩形
兩端是半圓的邊框
FlatButton跟RaisedButton用法基本一致,下面我們就直接用一下
注意,OutlineButton是一個(gè)有默認(rèn)邊線且背景透明的按鈕,也就是說(shuō)我們?cè)O(shè)置其邊線和顏色是無(wú)效的,其他屬性跟MaterialButton中屬性基本一致
下面我們直接來(lái)使用
效果如下:
IconButton是直接繼承自StatelessWidget的,默認(rèn)沒(méi)有背景
我們來(lái)看一下他的構(gòu)造方法
可以看到,icon是必填參數(shù)
icon接收一個(gè)Widget,但是一般我們都是傳入一個(gè)Icon Widget
其他屬性跟MaterialButton中的屬性用法基本一致
我們來(lái)用一下
效果如下:
我們也可以傳一個(gè)Text或其他Widget,這個(gè)大家自行嘗試吧
如果我們需要設(shè)置按鈕的最小寬度以及高度,button屬性中并沒(méi)有提供對(duì)應(yīng)的設(shè)置方法
使用如下:
Flutter中Button內(nèi)容大概就是這些
此控件比較簡(jiǎn)單,按鈕的功能可劃分為UI樣式與事件回調(diào)
這里將幾種不同的按鈕一起運(yùn)行,做下對(duì)比動(dòng)圖如下:
這里對(duì)五種按鈕進(jìn)行column居中排列如下
Text用于顯示簡(jiǎn)單樣式文本,它包含一些控制文本顯示樣式的一些屬性。
TextStyle用于指定文本顯示的樣式如顏色、字體、粗細(xì)、背景等。
TextStyle更多屬性設(shè)置如下:
如果我們需要對(duì)一個(gè)Text內(nèi)容的不同部分按照不同的樣式顯示,即富文本,這時(shí)就可以使用TextSpan,它代表文本的一個(gè)“片段”。
如上述,我們當(dāng)然也可以在上述鏈接上添加手勢(shì)事件,后續(xù)會(huì)提到。
在widget樹中,文本的樣式默認(rèn)是可以被繼承的,因此,如果在widget樹的某一個(gè)節(jié)點(diǎn)處設(shè)置一個(gè)默認(rèn)的文本樣式,那么該節(jié)點(diǎn)的子樹中所有文本都會(huì)默認(rèn)使用這個(gè)樣式,而DefaultTextStyle正是用于設(shè)置默認(rèn)文本樣式的。
舉例如下:
網(wǎng)站名稱:flutter按鈕禁用,flutter停止維護(hù)
URL鏈接:http://jinyejixie.com/article14/hojpge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、標(biāo)簽優(yōu)化、品牌網(wǎng)站建設(shè)、網(wǎng)站收錄、電子商務(wù)、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)