【发布时间】:2021-07-25 11:31:39
【问题描述】:
我想在flutter中修剪文本,但是文本可能有表情符号和其他特殊字符,正常的修剪方法会导致应用程序崩溃(文本小部件无法解释结果)
例子
Text(
trim("testsomethin la ba kalom ????????????", 28),
style: TextStyle(
fontSize: Dimen.mediumText,
),
overflow: TextOverflow.ellipsis,
),
我对字符串进行了硬编码,但在现实世界中它是用户生成的文本(比如说聊天系统),因此我们收到了很多崩溃。
只要运行上面的,你就会遇到崩溃。
例如在php 等其他语言中,可以通过以下变通方法进行多字节字符串修剪
$userText = "testsomethin la ba kalom ????????????";
$trimed = mb_substr(
$userText,
0,
min(28, strlen($userText))
);
这是我现在的修剪实现
class FormatMixin {
trim(String s, int trimLength) {
return '${s.substring(0, s.length <= trimLength ? s.length : trimLength)}${s.length <= trimLength ? '' : '...'}';
}
}
如何在 dart/flutter 中修剪包含特殊字符 emojis、utf-16 文本的文本?
对于我们自定义的mbTrim 函数,我将给出预期结果的测试用例:
text = "testme????socool????abc"
1. mbTrim(text, 6) = "testme"
2. mbTrim(text, 7) = "testme????"
3. mbTrim(text, 8) = "testme????s"
所以逻辑是,如果找到特殊字符,则需要将其完全包含或排除。 (我可以用 php 在服务器端做什么)
【问题讨论】:
标签: flutter dart special-characters utf-16