mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-07-12 20:30:13 +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/editable.dart';
|
||||||
import 'package:PiliPlus/common/widgets/flutter/text_field/spell_check.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/common/widgets/flutter/text_field/text_selection.dart';
|
||||||
|
import 'package:PiliPlus/utils/platform_utils.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/gestures.dart';
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:flutter/material.dart'
|
import 'package:flutter/material.dart'
|
||||||
@@ -3556,6 +3557,8 @@ class EditableTextState extends State<EditableText>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TextRange? _deletedRange;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void updateEditingValueWithDeltas(List<TextEditingDelta> textEditingDeltas) {
|
void updateEditingValueWithDeltas(List<TextEditingDelta> textEditingDeltas) {
|
||||||
if (textEditingDeltas.isEmpty) {
|
if (textEditingDeltas.isEmpty) {
|
||||||
@@ -3564,6 +3567,25 @@ class EditableTextState extends State<EditableText>
|
|||||||
}
|
}
|
||||||
TextEditingValue remoteValue = _value;
|
TextEditingValue remoteValue = _value;
|
||||||
for (final TextEditingDelta delta in textEditingDeltas) {
|
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);
|
widget.controller.syncRichText(delta);
|
||||||
remoteValue = delta.apply(remoteValue);
|
remoteValue = delta.apply(remoteValue);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user