AppFlowy-IO / AppFlowy-IO/appflowy-editor
[Bug] replaceText has the possibility of throwing `Bad state: no element`
- Dominant language
- Dart
- Stars
- 684
- Forks
- 329
- PR merge metrics
- No merged PRs in 30d
Description
### 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_
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.