Flutter?Widget?之FocusableActionDetector使用詳解
Material按鈕
Material按鈕會(huì)很好
但我們知道它們不一定適合你的應(yīng)用程序,所以你要自己編寫(xiě)??杀氖牵瑥念^開(kāi)始編寫(xiě)自己的空間可能是一項(xiàng)艱巨的工作。
桌面用戶期待懸停高亮、焦點(diǎn)和鍵盤(pán)快捷鍵,這是很難做好的。
GestureDetector自定義按鈕
是這樣的,你在你的應(yīng)用程序中創(chuàng)建一個(gè)自定義的按鈕, 使用GestureDetector,當(dāng)你點(diǎn)擊它的時(shí)候,按鈕會(huì)做一些事情
GestureDetector( onTap: showDash, child: Container( child: ColoredBox( child: Text("Click me!"), ), ), )
你添加適當(dāng)?shù)淖兞亢秃瘮?shù)來(lái)存儲(chǔ)和操作狀態(tài),如onHovered和onFocus
bool _onHovered = false; bool _onFocus = false; onHover() { _onHovered = !_onHovered; } onFocus(bool focused) { _onFocus = focused; }
為按鈕添加一些條件性的樣式
GestureDetector( onTap: showDash, child: Container( decoration: _onFocus ? Red Border : Blue Border, child: ColoredBox( color: _onHovered ? BlueGrey : Blue, child: Text("Click me!"), ) ) )
給按鈕一個(gè)鼠標(biāo)區(qū)域,包入一個(gè)Focus部件,然后是一個(gè)Action部件,最后是一個(gè)Shortcuts部件,更不用輸歐四個(gè)部件中的三個(gè)嵌套順序了
GestureDetector( onTap: showDash, child: Shortcuts( shortcuts: {MAP OF SHORTCUTS}, child: Actions( actions: {MAP OF ACTIONS AND INTENTS}, child: Focuus( onFocusChange: (bool focused) => onFocus(focused), child: MouseRegion( onEnter: (PointerEnterEvent event) => onHover(), onExit: (PointerExitEvent event) => onHover(), chihld: <Button> ), ), ), ), )
所以如果你不小心把Focus放在上面,就會(huì)毫無(wú)作用,太麻煩了
你的build方法變得很難操作了,它現(xiàn)在至少有四個(gè)部件還不包括GestureDetector.
所以你在寫(xiě)這些模版之前,請(qǐng)看看FocusableActionDetector,它將Actions、Shortcuts、Foocus和MouseRegion的所有功能結(jié)合在一個(gè)小部件中,與其嵌套所有四個(gè)部件,不如完全用FocusableActionDetector來(lái)代替。
給FocusableActionDetector提供與你傳遞給前幾個(gè)小部件相同的信息:Shortcut的Map,action的Map,焦點(diǎn)的回調(diào)以及最后懸停變化的回調(diào)
GestureDetector( onTap: showDash, child: FocusableActionDetector( onShowHoverHighlight: onHover, onShowFocusHighlight: onFocus, actions: {MAP OF ACTIONS}, shortcuts: {MAP OF SHORTCUTS}, child: <Button> ) )
就這樣,一個(gè)具有懸停效果和鍵盤(pán)快捷鍵的可聚焦按鈕,所有你想要的功能,而不需要確保你以正確的順序手動(dòng)潛逃四個(gè)不同的小部件
如果想了解有關(guān)FocusableActionDetector的內(nèi)容,或者關(guān)于Flutter的其他功能,請(qǐng)?jiān)L問(wèn)pub.dev
以上就是Flutter Widget 之FocusableActionDetector使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Flutter Widget FocusableActionDetector的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Flutter CustomPaint繪制widget使用示例
- Flutter?Widget開(kāi)發(fā)之Focus組件圖文詳解
- Flutter Widget開(kāi)發(fā)Shortcuts快捷鍵實(shí)例
- Flutter?Widget之NavigationBar使用詳解
- Flutter?Widget之FutureBuilder使用示例詳解
- Flutter?Widget?之package?mason實(shí)現(xiàn)詳解
- Flutter?Widget?之StatefulBuilder構(gòu)建方法詳解
- Flutter框架解決盒約束widget和assets里加載資產(chǎn)技術(shù)
相關(guān)文章
Mac OS下為Android Studio編譯FFmpeg解碼庫(kù)的詳細(xì)教程
這篇文章主要介紹了Mac OS下為Android Studio編譯FFmpeg解碼庫(kù)的詳細(xì)教程,包括NDK的配置和Android Studio的配置兩個(gè)部分的內(nèi)容,需要的朋友可以參考下2016-01-01淺談Android硬件加速原理與實(shí)現(xiàn)簡(jiǎn)介
這篇文章主要介紹了淺談Android硬件加速原理與實(shí)現(xiàn)簡(jiǎn)介,本文嘗試從底層硬件原理,一直到上層代碼實(shí)現(xiàn),對(duì)硬件加速技術(shù)進(jìn)行簡(jiǎn)單介紹,感興趣的小伙伴們可以參考一下2018-07-07去掉activity默認(rèn)動(dòng)畫(huà)效果的簡(jiǎn)單方法
下面小編就為大家?guī)?lái)一篇去掉activity默認(rèn)動(dòng)畫(huà)效果的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12OpenHarmony實(shí)現(xiàn)類Android短信驗(yàn)證碼及倒計(jì)時(shí)流程詳解
這篇文章主要介紹了OpenHarmony實(shí)現(xiàn)類Android短信驗(yàn)證碼及倒計(jì)時(shí)流程,發(fā)送短信驗(yàn)證碼后,一般在界面上都會(huì)有一個(gè)倒計(jì)時(shí)的顯示.在安卓中,實(shí)現(xiàn)類似的倒計(jì)時(shí)有多種方式,當(dāng)然背后的基本原理都是設(shè)定一個(gè)初始值,然后每過(guò)一定的間隔時(shí)間執(zhí)行操作2022-11-11詳解Android(共享元素)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)開(kāi)發(fā)實(shí)踐
本篇文章主要介紹了詳解Android(共享元素)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)開(kāi)發(fā)實(shí)踐,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-08-08Android實(shí)現(xiàn)TextView顯示HTML加圖片的方法
這篇文章主要介紹了Android實(shí)現(xiàn)TextView顯示HTML加圖片的方法,結(jié)合實(shí)例形式分析了TextView控件顯示網(wǎng)絡(luò)圖片的相關(guān)操作技巧,需要的朋友可以參考下2016-07-07Android?Framework原理Binder驅(qū)動(dòng)源碼解析
這篇文章主要為大家介紹了Android?Framework原理Binder驅(qū)動(dòng)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Android獲取設(shè)備CPU核數(shù)、時(shí)鐘頻率以及內(nèi)存大小的方法
這篇文章主要介紹了Android獲取設(shè)備CPU核數(shù)、時(shí)鐘頻率以及內(nèi)存大小的方法,涉及Android針對(duì)系統(tǒng)硬件相關(guān)操作技巧,需要的朋友可以參考下2016-07-07Android中實(shí)現(xiàn)自動(dòng)生成布局View的初始化代碼方法
這篇文章主要介紹了Android中實(shí)現(xiàn)自動(dòng)生成布局View的初始化代碼方法,本文使用解析layout 布局文件的方法實(shí)現(xiàn)需求,需要的朋友可以參考下2014-10-10