mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: could not delete character when using IME
This commit is contained in:
parent
19fc154681
commit
dc018bc7e4
@ -2,8 +2,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import 'package:flowy_editor/document/node.dart';
|
||||
import 'package:flowy_editor/document/path.dart';
|
||||
import 'package:flowy_editor/document/position.dart';
|
||||
import 'package:flowy_editor/document/selection.dart';
|
||||
import 'package:flowy_editor/editor_state.dart';
|
||||
import 'package:flowy_editor/extensions/node_extensions.dart';
|
||||
@ -83,22 +81,29 @@ class _FlowyInputState extends State<FlowyInput>
|
||||
void apply(List<TextEditingDelta> deltas) {
|
||||
// TODO: implement the detail
|
||||
for (final delta in deltas) {
|
||||
if (delta is TextEditingDeltaInsertion) {
|
||||
if (_composingTextRange != null) {
|
||||
_composingTextRange = TextRange(
|
||||
start: _composingTextRange!.start,
|
||||
end: delta.composing.end,
|
||||
);
|
||||
} else {
|
||||
_composingTextRange = delta.composing;
|
||||
}
|
||||
_updateComposing(delta);
|
||||
|
||||
if (delta is TextEditingDeltaInsertion) {
|
||||
_applyInsert(delta);
|
||||
} else if (delta is TextEditingDeltaDeletion) {
|
||||
_applyDelete(delta);
|
||||
} else if (delta is TextEditingDeltaReplacement) {
|
||||
_applyReplacement(delta);
|
||||
} else if (delta is TextEditingDeltaNonTextUpdate) {
|
||||
_composingTextRange = null;
|
||||
} else if (delta is TextEditingDeltaNonTextUpdate) {}
|
||||
}
|
||||
}
|
||||
|
||||
void _updateComposing(TextEditingDelta delta) {
|
||||
if (delta is! TextEditingDeltaNonTextUpdate) {
|
||||
if (_composingTextRange != null &&
|
||||
delta.composing.end != -1 &&
|
||||
_composingTextRange!.start != -1) {
|
||||
_composingTextRange = TextRange(
|
||||
start: _composingTextRange!.start,
|
||||
end: delta.composing.end,
|
||||
);
|
||||
} else {
|
||||
_composingTextRange = delta.composing;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -123,6 +128,23 @@ class _FlowyInputState extends State<FlowyInput>
|
||||
}
|
||||
}
|
||||
|
||||
void _applyDelete(TextEditingDeltaDeletion delta) {
|
||||
final selectionService = _editorState.service.selectionService;
|
||||
final currentSelection = selectionService.currentSelection.value;
|
||||
if (currentSelection == null) {
|
||||
return;
|
||||
}
|
||||
if (currentSelection.isSingle) {
|
||||
final textNode = selectionService.currentSelectedNodes.first as TextNode;
|
||||
final length = delta.deletedRange.end - delta.deletedRange.start;
|
||||
TransactionBuilder(_editorState)
|
||||
..deleteText(textNode, delta.deletedRange.start, length)
|
||||
..commit();
|
||||
} else {
|
||||
// TODO: implement
|
||||
}
|
||||
}
|
||||
|
||||
void _applyReplacement(TextEditingDeltaReplacement delta) {
|
||||
final selectionService = _editorState.service.selectionService;
|
||||
final currentSelection = selectionService.currentSelection.value;
|
||||
|
Loading…
Reference in New Issue
Block a user