diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/KeyEventHandler.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/KeyEventHandler.ets index 58133fd461d8669580f47c2358ae33739957c70d..1e06b9a187f90f33050c48d8d94ea4a88541adc0 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/KeyEventHandler.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/KeyEventHandler.ets @@ -156,7 +156,7 @@ export class KeyEventHandler { } // 处理非字符按键 if (event.keyCode == KeyCode.KEYCODE_DEL) { - this.textInputPlugin?.getEditingState().handleDeleteEvent(false, 0) + this.textInputPlugin?.getEditingState().handleDeleteEvent(false, 1) } } this.isShiftMode = event.keyCode == KeyCode.KEYCODE_SHIFT_LEFT diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/editing/ListenableEditingState.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/editing/ListenableEditingState.ets index 351277019b2ba94b0b7cd759d33574c48b0b3198..954595151d5de3a39ab1fa33a1da98c626052b57 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/editing/ListenableEditingState.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/editing/ListenableEditingState.ets @@ -253,6 +253,10 @@ export class ListenableEditingState { } handleDeleteEvent(leftOrRight: boolean, length: number): void { + if (length === 0) { + return; + } + let start = this.mSelectionStartCache < this.mSelectionEndCache ? this.mSelectionStartCache : this.mSelectionEndCache; let end = this.mSelectionStartCache > this.mSelectionEndCache ? this.mSelectionStartCache : this.mSelectionEndCache; @@ -263,7 +267,12 @@ export class ListenableEditingState { } let unicodeStart = start; if (start == end) { - unicodeStart = FlutterTextUtils.getOffsetBefore(this.mStringCache, start); + for (let i = 0; i < length; i++) { + unicodeStart = FlutterTextUtils.getOffsetBefore(this.mStringCache, unicodeStart); + if (unicodeStart === 0) { + break; + } + } } this.replace(unicodeStart, end, "", 0, 0); this.mSelectionStartCache = unicodeStart; @@ -277,7 +286,12 @@ export class ListenableEditingState { } let unicodeEnd = end; if (start == end) { - unicodeEnd = FlutterTextUtils.getOffsetAfter(this.mStringCache, start); + for (let i = 0; i < length; i++) { + unicodeEnd = FlutterTextUtils.getOffsetAfter(this.mStringCache, unicodeEnd); + if (unicodeEnd === this.mStringCache.length) { + break; + } + } } this.replace(start, unicodeEnd, "", 0, 0); this.mSelectionEndCache = start;