mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-06-24 19:20:15 +08:00
fix RichTextField text replace on desktop
Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
@@ -25,6 +25,7 @@ import 'package:PiliPlus/common/widgets/flutter/text_field/controller.dart';
|
||||
import 'package:PiliPlus/common/widgets/flutter/text_field/editable.dart';
|
||||
import 'package:PiliPlus/common/widgets/flutter/text_field/spell_check.dart';
|
||||
import 'package:PiliPlus/common/widgets/flutter/text_field/text_selection.dart';
|
||||
import 'package:PiliPlus/utils/platform_utils.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart'
|
||||
@@ -3556,6 +3557,8 @@ class EditableTextState extends State<EditableText>
|
||||
}
|
||||
}
|
||||
|
||||
TextRange? _deletedRange;
|
||||
|
||||
@override
|
||||
void updateEditingValueWithDeltas(List<TextEditingDelta> textEditingDeltas) {
|
||||
if (textEditingDeltas.isEmpty) {
|
||||
@@ -3564,6 +3567,25 @@ class EditableTextState extends State<EditableText>
|
||||
}
|
||||
TextEditingValue remoteValue = _value;
|
||||
for (final TextEditingDelta delta in textEditingDeltas) {
|
||||
if (PlatformUtils.isDesktop) {
|
||||
if (_deletedRange case final range?) {
|
||||
final deleteDelta = TextEditingDeltaDeletion(
|
||||
oldText: remoteValue.text,
|
||||
deletedRange: range,
|
||||
selection: remoteValue.selection,
|
||||
composing: remoteValue.composing,
|
||||
);
|
||||
_deletedRange = null;
|
||||
widget.controller.syncRichText(deleteDelta);
|
||||
} else if (delta is TextEditingDeltaInsertion &&
|
||||
!remoteValue.selection.isCollapsed) {
|
||||
final offset = delta.textInserted.length;
|
||||
_deletedRange = TextRange(
|
||||
start: remoteValue.selection.start + offset,
|
||||
end: remoteValue.selection.end + offset,
|
||||
);
|
||||
}
|
||||
}
|
||||
widget.controller.syncRichText(delta);
|
||||
remoteValue = delta.apply(remoteValue);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user