[Bug] replaceText has the possibility of throwing `Bad state: no element`
Opened this issue · 0 comments
Xazin commented
Bug Description
The transaction of replaceText
does not check the length of the Delta before calling .first
.
How to Reproduce
Immediately after inserting a TextDelta with no attribute, call replaceText.
Eg.
final transaction = editorState.transaction
..insertTextDelta(
node,
selection.end.offset,
Delta(operations: [TextInsert('insert')]),
)
..replaceText(
node,
selection.end.offset - 3,
3,
'replacement',
);
Expected Behavior
Change the code in replaceText
:
var newAttributes = attributes;
if (index != 0 && attributes == null) {
newAttributes = delta.slice(max(index - 1, 0), index).first.attributes;
if (newAttributes == null) {
final slicedDelta = delta.slice(index, index + length);
if (slicedDelta.isNotEmpty) {
newAttributes = slicedDelta.first.attributes;
}
}
}
To add a required check and make sure the logic is correct.
Specifically the call to .first
on delta.slice(max(index - 1, 0), index)
is what might fail.
Operating System
AppFlowy Editor Version(s)
main
Screenshots
No response
Additional Context
No response