最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter開發(fā)之Shortcuts快捷鍵組件的用法詳解

 更新時(shí)間:2023年05月19日 14:12:17   作者:張風(fēng)捷特烈  
在桌面端的開發(fā)中,鍵盤快捷鍵是非常常見而必要的,F(xiàn)lutter?既然可以開發(fā)桌面端應(yīng)用,那必然要提供自定義快捷鍵,所以本文就來和大家講講Shortcuts組件的簡單使用吧

在桌面端的開發(fā)中,鍵盤快捷鍵是非常常見而必要的,比如 Ctrl + F 搜索, Ctrl + C 復(fù)制等。Flutter 既然可以開發(fā)桌面端應(yīng)用,那必然要提供自定義快捷鍵,觸發(fā)事件的功能支持。這就是本節(jié)要介紹的 Shortcuts 組件體系,相關(guān)代碼后續(xù)會(huì)放入 FlutterUnit 中,敬請(qǐng)關(guān)注 ~

1. Shortcuts 組件的簡單使用

首先,來個(gè)簡單的功能體驗(yàn)一下。還是那初始的計(jì)數(shù)器項(xiàng)目來開刀,之前是點(diǎn)擊按鈕數(shù)字增加,現(xiàn)在試一下通過快捷鍵觸發(fā)更新的邏輯:

快捷鍵體系中,Shortcuts 組件維護(hù)快捷鍵(ShortcutActivator)和意圖(Intent) 數(shù)據(jù)的映射,也就是說一個(gè) Shortcuts 組件內(nèi)部可以定義若干個(gè)快捷鍵。比如下面定義 Ctrl + Q 的快捷鍵,其對(duì)應(yīng)的意圖是 IncrementIntent。

Widget buildShortcuts({required Widget child}) {
  return Shortcuts(
    shortcuts: <ShortcutActivator, Intent>{
      LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.keyQ): const IncrementIntent(),
    },
    child: Actions(
      actions: <Type, Action<Intent>>{
        IncrementIntent:  CallbackAction<IncrementIntent>(onInvoke: _incrementCounter),
      },
      child: Focus(
        autofocus: true,
        child: child,
      ),
    ),
  );
}

我們需要派生 Intent 來自定義需要的意圖,作為事件響應(yīng)的標(biāo)識(shí)。通過 Actions 組件根據(jù)意圖來響應(yīng)快捷鍵,其中通過 actions 參數(shù)維護(hù)類型和 Action 回調(diào)事件,觸發(fā)狀態(tài)類中 _incrementCounter 方法即可。

另外,快捷鍵體系需要焦點(diǎn)的支持,所以需要 Focus 組件,只有焦點(diǎn)在激活狀態(tài),快捷鍵才可以響應(yīng),通過焦點(diǎn)可以控制快捷鍵是否響應(yīng)。想要默認(rèn)情況下響應(yīng),可以將 autofocus 置為 true 。

---->[狀態(tài)類中]----
void _incrementCounter(IncrementIntent intent) {
  setState(() {
    _counter++;
  });
}
class IncrementIntent extends Intent { 
    const IncrementIntent(); 
 }

在事件響應(yīng)時(shí),可以獲取意圖對(duì)象。所以可以在意圖派生類中提供成員數(shù)據(jù),以便在事件響應(yīng)時(shí)進(jìn)行訪問。比如這里 IncrementIntent 可以有一個(gè)增加值的成員,這樣在 _incrementCounter 可以獲取到意圖對(duì)象,處理每次自增多少的邏輯。

最后,使用 buildShortcuts 方法包裹在想要響應(yīng)快捷鍵的組件上即可,當(dāng)然你可以直接套上去,或者封裝一個(gè)組件單獨(dú)維護(hù)快捷鍵的處理。這屬于代碼結(jié)構(gòu)的問題,可以自己斟酌。

2. 快捷鍵與焦點(diǎn)的關(guān)聯(lián)

下面實(shí)現(xiàn)一些輸入框通過 Ctrl + Enter 快捷鍵發(fā)送的功能,介紹一下快捷鍵和焦點(diǎn)的關(guān)聯(lián)?,F(xiàn)在的目的是只有當(dāng)輸入框獲取焦點(diǎn)之后,才可以響應(yīng)快捷鍵。對(duì)于輸入框來說,它內(nèi)部有 Focus 組件,并且可以提供 FocusNode 焦點(diǎn)對(duì)象來控制焦點(diǎn):對(duì)于輸入框來說,焦點(diǎn)激活就是可輸入狀態(tài):

final FocusNode _inputNode = FocusNode();

TextField 組件可以設(shè)置 focusNode 參數(shù)設(shè)置焦點(diǎn)對(duì)象,

如下所示,提供 buildShortcutsSend 方法,使用 Ctrl + enter 觸發(fā) SendMessageIntent 意圖。快捷鍵觸發(fā)時(shí),回調(diào) _sendMessage 方法,其中取消焦點(diǎn),清空文字。焦點(diǎn)取消之后,就無法響應(yīng)快捷鍵了,當(dāng)點(diǎn)擊輸入框時(shí),焦點(diǎn)會(huì)再次激活,可以響應(yīng)快捷鍵。

 Widget buildShortcutsSend({required Widget child}) {
   return Shortcuts(
     shortcuts: <ShortcutActivator, Intent>{
       LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.enter): const SendMessageIntent(),
     },
     child: Actions(
       actions: <Type, Action<Intent>>{
         SendMessageIntent: CallbackAction<SendMessageIntent>(onInvoke: _sendMessage),
       },
       child: child,
     ),
   );
 }
void _sendMessage(SendMessageIntent intent) {
  print("====_sendMessage:${ctrl.text}===================");
  _inputNode.unfocus();
  ctrl.clear();
}
 class SendMessageIntent extends Intent {
  const SendMessageIntent();
}

到這里,鍵盤快捷鍵的使用就介紹得差不多了,希望可以對(duì)你在桌面端的開發(fā)有所幫助。關(guān)于 Focus 體系也是一個(gè)比較復(fù)雜的東西,以后有機(jī)會(huì)再詳細(xì)介紹。

以上就是Flutter開發(fā)之Shortcuts快捷鍵組件的用法詳解的詳細(xì)內(nèi)容,更多關(guān)于Flutter Shortcuts的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android 隱藏及切換顯示鍵盤

    Android 隱藏及切換顯示鍵盤

    這篇文章主要介紹了Android 隱藏及切換顯示鍵盤的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • mui.init()與mui.plusReady()區(qū)別和關(guān)系

    mui.init()與mui.plusReady()區(qū)別和關(guān)系

    給大家分享一下在使用MUI進(jìn)行APP開發(fā)的時(shí)候,mui.init()與mui.plusReady()區(qū)別以及使用上不同之處。
    2017-11-11
  • Android Canvas之drawBitmap方法案例詳解

    Android Canvas之drawBitmap方法案例詳解

    這篇文章主要介紹了Android Canvas之drawBitmap方法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Android客戶端首次啟動(dòng)引導(dǎo)界面

    Android客戶端首次啟動(dòng)引導(dǎo)界面

    這篇文章主要為大家詳細(xì)介紹了Android客戶端首次啟動(dòng)引導(dǎo)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android自定義View實(shí)現(xiàn)通訊錄字母索引(仿微信通訊錄)

    Android自定義View實(shí)現(xiàn)通訊錄字母索引(仿微信通訊錄)

    本文主要介紹了Android自定義View實(shí)現(xiàn)通訊錄字母索引(仿微信通訊錄)的實(shí)現(xiàn)步驟與方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2016-12-12
  • Android Studio3安裝圖文教程

    Android Studio3安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了Android Studio3安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Android編程之判斷SD卡狀態(tài)的方法

    Android編程之判斷SD卡狀態(tài)的方法

    這篇文章主要介紹了Android編程之判斷SD卡狀態(tài)的方法,結(jié)合實(shí)例分析了Android針對(duì)SD卡的權(quán)限操作及狀態(tài)判定技巧,需要的朋友可以參考下
    2016-02-02
  • Android編程鬧鐘設(shè)置方法詳解

    Android編程鬧鐘設(shè)置方法詳解

    這篇文章主要介紹了Android編程鬧鐘設(shè)置方法,結(jié)合實(shí)例形式分析了Android鬧鐘設(shè)置的步驟與時(shí)間監(jiān)聽的操作技巧,需要的朋友可以參考下
    2016-10-10
  • android圖庫豎屏不顯示status bar的解決方法

    android圖庫豎屏不顯示status bar的解決方法

    圖庫在JB和JB2的版本上顯示的行為是:橫屏全屏顯示,豎屏?xí)@示status bar,圖庫在JB和JB2的版本上顯示的行為是:橫屏全屏顯示,豎屏?xí)@示status bar,具體實(shí)現(xiàn)方法如下,不會(huì)的朋友可以參考下哈
    2013-06-06
  • Android仿UC底部菜單欄實(shí)現(xiàn)原理與代碼

    Android仿UC底部菜單欄實(shí)現(xiàn)原理與代碼

    最近剛看完ViewPager,開始我打算用自定義的imgBtn,但是發(fā)現(xiàn)放在pager選項(xiàng)卡中不好排版,所以最好選了GridView,接下來介紹底部菜單欄實(shí)現(xiàn)
    2013-01-01

最新評(píng)論

延安市| 乌鲁木齐市| 十堰市| 凤台县| 呈贡县| 重庆市| 循化| 青冈县| 军事| 汝南县| 佛冈县| 丹东市| 赤城县| 沅江市| 马公市| 湖口县| 民权县| 新安县| 乐至县| 盐源县| 黑龙江省| 洪泽县| 慈溪市| 金坛市| 和硕县| 垫江县| 图片| 卓尼县| 江陵县| 遵义市| 普兰县| 五寨县| 东安县| 彭山县| 榆中县| 佳木斯市| 张家港市| 黎城县| 公主岭市| 古交市| 恩施市|