簡體   English   中英

Flutter - 打開軟鍵盤后讀取 RawKeyEvents 時的奇怪行為

[英]Flutter - Weird behavior when reading RawKeyEvents after opening soft keyboard

我正在開發一個 Flutter 應用程序,該應用程序最終將在基於 Android 的掃描設備上運行。 與許多硬件掃描儀一樣,該設備在掃描條形碼時會迅速觸發許多鍵盤事件。 I've resorted to a Flutter package that seemed ideal for my usecase: https://pub.dev/packages/flutter_barcode_listener - Basically all this does is listen for RawKeyEvents using Flutter's built-in RawKeyboard class, translate those to usable characters, fill包含這些字符的數組,並在收到換行符 (\n) 后,將數組加入字符串並返回。

這工作正常,直到在應用程序中打開軟鍵盤,一旦發生這種情況,偵聽器在掃描條形碼后收到的唯一 RawKeyEvent 是換行符,沒有別的。 因此,掃描條碼后會返回一個空字符串。 奇怪的是,導致應用程序失去焦點(例如,通過使用主頁按鈕將其最小化或打開最近的應用程序概覽)將恢復條形碼偵聽器的功能,並且將再次生成正確的 RawKeyEvents。

這絕對是 Flutter 的一個問題,因為我確認掃描儀仍然通過 ADB 日志讀取數據。 任何有關可能導致此問題的指示都非常受歡迎。

我還想補充一點,ADB 記錄在掃描條形碼后會告訴我以下信息:

3104  9582 D ScanDataOutput: softkeyboard is not running (2)
3104  9582 D ScanDataOutput: SSI(terminator):<LF>
3104  9582 D ScanDataOutput: LF, 4
3104  9582 E ScanDataOutput: ERROR! terminator = <LF>!
3104  9582 E ScanDataOutput: ERROR! terminator :
3104  9582 E ScanDataOutput: dataResult:

原來這是我使用的硬件掃描儀的問題。 掃描儀未配置為明確使用 KeyEvents 作為 output 方法。 這讓我想到了另一個問題,即 Flutter 的 RawKeyBoard 庫會導致上述軟鍵盤在接收到 KeyEvent 時激活。 這會導致不良行為,即掃描條形碼而不專注於 TextInput 仍會導致鍵盤打開。

如果有人在 Android 上遇到類似問題,請參考以下github 線程 不幸的是,這是 Flutter 本身的錯誤,目前只能通過使用不受此錯誤影響的某些第三方軟件鍵盤來規避。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM