copy/cut rich text

Closes #1047

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-08-18 20:10:40 +08:00
parent 43fa00848d
commit 08c3789321
2 changed files with 42 additions and 5 deletions

View File

@@ -19,6 +19,7 @@ import 'dart:math';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/models/common/image_type.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -1019,4 +1020,37 @@ class RichTextEditingController extends TextEditingController {
}
return newSelection;
}
String? getSelectionText(TextSelection selection) {
try {
String text = '';
final start = selection.start;
final end = selection.end;
for (var e in items) {
final range = e.range;
if (start >= range.end) {
continue;
}
if (end <= range.start) {
break;
}
if (e.isRich) {
if (e.emote != null) {
text += e.rawText;
} else {
text += e.text;
}
} else {
text += e.text.substring(
max(start, range.start) - range.start,
min(end, range.end) - range.start,
);
}
}
return text;
} catch (e) {
if (kDebugMode) debugPrint('err getSelectionText: $e');
return null;
}
}
}