diff --git a/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.mm b/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.mm index b3270370cb7b4bf8403d1de29ca28df8f9716821..300611121372a4d9e5d641ea14d2ff96a71b0548 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterTextInputPlugin.mm @@ -112,18 +112,16 @@ static UIKeyboardType ToUIKeyboardType(NSString* inputType) { - (void)deleteBackward { int start = std::max(0, std::min(_selectionBase, _selectionExtent)); int end = std::max(0, std::max(_selectionBase, _selectionExtent)); - int len = end - start; - if (len > 0) { - NSRange selRange = [self.text - rangeOfComposedCharacterSequencesForRange:NSMakeRange(start, len)]; - [self.text deleteCharactersInRange:selRange]; - } else if (start > 0) { - start -= 1; - NSRange charRange = [self.text rangeOfComposedCharacterSequenceAtIndex:start]; - [self.text deleteCharactersInRange:charRange]; + NSRange deleteRange = NSMakeRange(start, end - start); + if (deleteRange.length > 0) { + deleteRange = [self.text rangeOfComposedCharacterSequencesForRange:deleteRange]; + [self.text deleteCharactersInRange:deleteRange]; + } else if (deleteRange.location > 0) { + deleteRange = [self.text rangeOfComposedCharacterSequenceAtIndex:deleteRange.location - 1]; + [self.text deleteCharactersInRange:deleteRange]; } - _selectionBase = start; - _selectionExtent = start; + _selectionBase = deleteRange.location; + _selectionExtent = deleteRange.location; _selectionAffinity = _kTextAffinityDownstream; [self updateEditingState]; }