mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-07-27 14:00:12 +08:00
fix RichTextField selection (#2374)
Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
@@ -171,7 +171,6 @@ class RichTextItem {
|
|||||||
|
|
||||||
if (insertionOffset == 0 && range.start == 0) {
|
if (insertionOffset == 0 && range.start == 0) {
|
||||||
final insertedLength = delta.textInserted.length;
|
final insertedLength = delta.textInserted.length;
|
||||||
controller.newSelection = TextSelection.collapsed(offset: insertedLength);
|
|
||||||
if (!isRich && delta.isText) {
|
if (!isRich && delta.isText) {
|
||||||
text = delta.textInserted + text;
|
text = delta.textInserted + text;
|
||||||
range = TextRange(start: range.start, end: range.start + text.length);
|
range = TextRange(start: range.start, end: range.start + text.length);
|
||||||
@@ -203,7 +202,6 @@ class RichTextItem {
|
|||||||
|
|
||||||
if (range.end == insertionOffset) {
|
if (range.end == insertionOffset) {
|
||||||
final end = insertionOffset + delta.textInserted.length;
|
final end = insertionOffset + delta.textInserted.length;
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
if ((isText && delta.isText) || (isComposing && delta.isComposing)) {
|
if ((isText && delta.isText) || (isComposing && delta.isComposing)) {
|
||||||
text += delta.textInserted;
|
text += delta.textInserted;
|
||||||
range = TextRange(start: range.start, end: end);
|
range = TextRange(start: range.start, end: end);
|
||||||
@@ -227,7 +225,6 @@ class RichTextItem {
|
|||||||
final leadingText = text.substring(0, insertionOffset - range.start);
|
final leadingText = text.substring(0, insertionOffset - range.start);
|
||||||
final trailingString = text.substring(leadingText.length);
|
final trailingString = text.substring(leadingText.length);
|
||||||
final insertEnd = insertionOffset + delta.textInserted.length;
|
final insertEnd = insertionOffset + delta.textInserted.length;
|
||||||
controller.newSelection = TextSelection.collapsed(offset: insertEnd);
|
|
||||||
if (delta.isText) {
|
if (delta.isText) {
|
||||||
text = leadingText + delta.textInserted + trailingString;
|
text = leadingText + delta.textInserted + trailingString;
|
||||||
range = TextRange(
|
range = TextRange(
|
||||||
@@ -375,9 +372,6 @@ class RichTextItem {
|
|||||||
);
|
);
|
||||||
final end = range.start + text.length;
|
final end = range.start + text.length;
|
||||||
range = TextRange(start: range.start, end: end);
|
range = TextRange(start: range.start, end: end);
|
||||||
controller.newSelection = TextSelection.collapsed(
|
|
||||||
offset: replacedRange.start + delta.replacementText.length,
|
|
||||||
);
|
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
final leadingText = text.substring(
|
final leadingText = text.substring(
|
||||||
@@ -386,7 +380,6 @@ class RichTextItem {
|
|||||||
);
|
);
|
||||||
final trailString = text.substring(replacedRange.end - range.start);
|
final trailString = text.substring(replacedRange.end - range.start);
|
||||||
final insertEnd = replacedRange.start + delta.replacementText.length;
|
final insertEnd = replacedRange.start + delta.replacementText.length;
|
||||||
controller.newSelection = TextSelection.collapsed(offset: insertEnd);
|
|
||||||
final config = delta.config;
|
final config = delta.config;
|
||||||
final insertedItem = RichTextItem(
|
final insertedItem = RichTextItem(
|
||||||
type: config.type,
|
type: config.type,
|
||||||
@@ -424,7 +417,6 @@ class RichTextItem {
|
|||||||
id = config.id;
|
id = config.id;
|
||||||
final end = range.start + text.length;
|
final end = range.start + text.length;
|
||||||
range = TextRange(start: range.start, end: end);
|
range = TextRange(start: range.start, end: end);
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,7 +430,6 @@ class RichTextItem {
|
|||||||
id = config.id;
|
id = config.id;
|
||||||
final end = range.start + text.length;
|
final end = range.start + text.length;
|
||||||
range = TextRange(start: range.start, end: end);
|
range = TextRange(start: range.start, end: end);
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
return (remove: false, toAdd: null);
|
return (remove: false, toAdd: null);
|
||||||
}
|
}
|
||||||
return (remove: true, toAdd: null);
|
return (remove: true, toAdd: null);
|
||||||
@@ -454,7 +445,6 @@ class RichTextItem {
|
|||||||
);
|
);
|
||||||
final end = range.start + text.length;
|
final end = range.start + text.length;
|
||||||
range = TextRange(start: range.start, end: end);
|
range = TextRange(start: range.start, end: end);
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
text = text.replaceRange(
|
text = text.replaceRange(
|
||||||
@@ -473,7 +463,6 @@ class RichTextItem {
|
|||||||
id: config.id,
|
id: config.id,
|
||||||
range: TextRange(start: replacedRange.start, end: end),
|
range: TextRange(start: replacedRange.start, end: end),
|
||||||
);
|
);
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
return (remove: false, toAdd: [insertedItem]);
|
return (remove: false, toAdd: [insertedItem]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -484,7 +473,6 @@ class RichTextItem {
|
|||||||
id = config.id;
|
id = config.id;
|
||||||
final end = range.start + text.length;
|
final end = range.start + text.length;
|
||||||
range = TextRange(start: range.start, end: end);
|
range = TextRange(start: range.start, end: end);
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,7 +495,6 @@ class RichTextItem {
|
|||||||
);
|
);
|
||||||
final end = range.start + text.length;
|
final end = range.start + text.length;
|
||||||
range = TextRange(start: range.start, end: end);
|
range = TextRange(start: range.start, end: end);
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
final end = range.start + delta.replacementText.length;
|
final end = range.start + delta.replacementText.length;
|
||||||
@@ -520,7 +507,6 @@ class RichTextItem {
|
|||||||
id: config.id,
|
id: config.id,
|
||||||
range: TextRange(start: range.start, end: end),
|
range: TextRange(start: range.start, end: end),
|
||||||
);
|
);
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
text = text.substring(replacedRange.end - range.start);
|
text = text.substring(replacedRange.end - range.start);
|
||||||
range = TextRange(start: end, end: end + text.length);
|
range = TextRange(start: end, end: end + text.length);
|
||||||
return (remove: true, toAdd: [insertedItem]);
|
return (remove: true, toAdd: [insertedItem]);
|
||||||
@@ -533,7 +519,6 @@ class RichTextItem {
|
|||||||
id = config.id;
|
id = config.id;
|
||||||
final end = range.start + text.length;
|
final end = range.start + text.length;
|
||||||
range = TextRange(start: range.start, end: end);
|
range = TextRange(start: range.start, end: end);
|
||||||
controller.newSelection = TextSelection.collapsed(offset: end);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -608,6 +593,7 @@ class RichTextEditingController extends TextEditingController {
|
|||||||
onMention?.call();
|
onMention?.call();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newSelection = delta.selection;
|
||||||
if (items.isEmpty) {
|
if (items.isEmpty) {
|
||||||
final config = delta.config;
|
final config = delta.config;
|
||||||
items.add(
|
items.add(
|
||||||
@@ -619,9 +605,6 @@ class RichTextEditingController extends TextEditingController {
|
|||||||
id: config.id,
|
id: config.id,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
newSelection = TextSelection.collapsed(
|
|
||||||
offset: delta.textInserted.length,
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (int index = 0; index < items.length; index++) {
|
for (int index = 0; index < items.length; index++) {
|
||||||
@@ -647,6 +630,7 @@ class RichTextEditingController extends TextEditingController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case TextEditingDeltaReplacement e:
|
case TextEditingDeltaReplacement e:
|
||||||
|
newSelection = delta.selection;
|
||||||
for (int index = 0; index < items.length; index++) {
|
for (int index = 0; index < items.length; index++) {
|
||||||
final item = items[index];
|
final item = items[index];
|
||||||
({bool remove, List<RichTextItem>? toAdd})? res = item.onReplace(
|
({bool remove, List<RichTextItem>? toAdd})? res = item.onReplace(
|
||||||
|
|||||||
@@ -2627,7 +2627,7 @@ class EditableTextState extends State<EditableText>
|
|||||||
composing: TextRange.empty,
|
composing: TextRange.empty,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
final newValue = _value.copyWith(
|
final newValue = TextEditingValue(
|
||||||
text: widget.controller.plainText,
|
text: widget.controller.plainText,
|
||||||
selection: widget.controller.newSelection,
|
selection: widget.controller.newSelection,
|
||||||
composing: TextRange.empty,
|
composing: TextRange.empty,
|
||||||
@@ -3569,7 +3569,7 @@ class EditableTextState extends State<EditableText>
|
|||||||
remoteValue = delta.apply(remoteValue);
|
remoteValue = delta.apply(remoteValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
final newValue = _value.copyWith(
|
final newValue = TextEditingValue(
|
||||||
text: widget.controller.plainText,
|
text: widget.controller.plainText,
|
||||||
selection: widget.controller.newSelection,
|
selection: widget.controller.newSelection,
|
||||||
composing: textEditingDeltas.last.composing,
|
composing: textEditingDeltas.last.composing,
|
||||||
@@ -5552,7 +5552,7 @@ class EditableTextState extends State<EditableText>
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
final newValue = oldValue.copyWith(
|
final newValue = TextEditingValue(
|
||||||
text: widget.controller.plainText,
|
text: widget.controller.plainText,
|
||||||
selection: widget.controller.newSelection,
|
selection: widget.controller.newSelection,
|
||||||
composing: TextRange.empty,
|
composing: TextRange.empty,
|
||||||
|
|||||||
Reference in New Issue
Block a user