如何从 Flutter 中的字符串中删除/检测整个表情符号?

2024-02-22

我想在 Flutter(或 Dart)中模拟字符串中的键盘退格删除事件。就像是:

String str = "hello????????你们????????????‍????‍????"
myBackspace(str) // will return "hello????????你们????????"
myBackspace(str) // will return "hello????????你们????"
myBackspace(str) // will return "hello????????你们"
myBackspace(str) // will return "hello????????你"
myBackspace(str) // will return "hello????????"
myBackspace(str) // will return "hello"
myBackspace(str) // will return "hell"

Update

Dart 团队发布了辅助包 https://pub.dev/packages/characters这有助于实现这一目标。String.characters.skipLast(1)应该能够做到你所期望的。

旧答案

首先,让我们了解一些定义。根据this https://engineering.linecorp.com/en/blog/the-7-ways-of-counting-characters/ page:

  1. 字节:8 位。 Unicode 字符串在内存或存储中占用的字节数取决于编码。
  2. 代码单元:可用于在文本编码中表达单个单元的最小位组合。例如,UTF-8 中的 1 个代码单元为 1 个字节,UTF-16 中为 2 个字节,UTF-32 中为 4 个字节。
  3. 代码点[或符文]:Unicode 字符。 Unicode 空间上的单个整数值(从 U+0000-U+10FFFF)。
  4. 字素簇:用户感知的单个字符。 1 个字素簇由多个代码点组成。

当您使用删除最后一个字符时substring,您实际上正在删除最后一个代码单元。如果你跑print(newStr.codeUnits) and print(str.codeUnits),你会看到符文128512相当于代码单元的联合55357 and 56832, so 55357实际上是有效的,但如果没有另一个代码单元的“帮助”,则不代表任何内容。

事实上,你不想使用substring()当字符串中存在非 ASCII 字符(如表情符号或阿拉伯字母)时。它永远不会起作用。您要做的就是删除最后一个字素簇。就这么简单:

str.graphemeClusters.removeLast()

然而,Dart 还不支持这一点。围绕这一点有几个问题。其中一些:https://github.com/dart-lang/language/issues/34 https://github.com/dart-lang/language/issues/34
https://github.com/dart-lang/language/issues/49 https://github.com/dart-lang/language/issues/49

缺乏支持可能会导致其他一些问题,例如您提到的问题和这个问题:https://github.com/flutter/flutter/issues/31818 https://github.com/flutter/flutter/issues/31818

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Flutter 中的字符串中删除/检测整个表情符号? 的相关文章

  • 更改 Flutter Web 应用程序中的屏幕尺寸

    我正在使用 Flutter 构建一个 Web 应用程序 但我想模仿 iPhone 屏幕视图 我知道调整窗口大小可以达到这种效果 但是有没有办法将所有内容包装在手机屏幕图形的框架中 或者更改 MaterialApp 的尺寸 使其包含在手机屏幕
  • Flutter Firestore 查询嵌套子集合

    我正在尝试查询 Firebase 中的子集合 但我总是得到一个空列表 这是我的查询 Firestore instance collection messages where idFrom isEqualTo userID snapshots
  • 如何使用 Flutter (Dart) 在 android 13 (API 33) 上保存文件

    文件不仅仅是媒体文件 也可能是 pdf zip xls 等 API 33 上的外部存储权限被永久拒绝 所以 我们不能像这样的方法来保存 gt String path This is external storage path File pa
  • 导航到新屏幕时状态栏颜色

    我在我的中使用以下build 第一个屏幕更改状态栏颜色的方法 效果很好 1st screen s build method SystemChrome setSystemUIOverlayStyle SystemUiOverlayStyle
  • Flutter textfield Flutter RTL光标位置问题n-1

    我不知道这个问题是否是老问题 但我尝试了所有方法都没有成功 在输入字段中选择字母 n 时出现的问题 光标跳转到 n 1 包含视频中显示的问题 仅在 RTL 中存在问题 该链接包含问题的代码和视频 代码 链接在这里 https github
  • flutter run 无法在 iOS 模拟器上运行,但 Xcode 可以构建

    在我的 Flutter 项目中 flutter run命令无法将项目构建到 iOS 模拟器 但在 Xcode 中 当我单击构建按钮时 Xcode 可以毫无问题地构建它 我正在使用 AgoraRTC 库 添加 Flutter Quill 后就
  • Flutter 为什么环绕行时 Wrap 不起作用?

    我试图将一些内容包装在 flutter 中 但没有成功 我发现我无法像使用芯片或文本小部件那样换行 有人知道为什么吗 这是三组 Rows 每组都有一个图标和一个文本 并排放置 但在较小的屏幕中它会溢出 因为没有足够的空间 宽度 我希望当当前
  • 显示菜单位置 Flutter

    我有一个 GridView 小部件 其中包含一些用 GestureDetector 包裹的 GridTiles 当我长按它时 尝试显示一个菜单以删除 GridTile 一切都很好 除了我希望从我拥有的点开始显示该菜单点击的不是应用程序的顶部
  • 颤振文本小部件仅显示最后一个条目

    我正在尝试在 flutter 中创建日历 目前我正在实施这些活动 为了测试这一点 我创建了一个方法来检查当前日期 即创建行的时间 是否有事件 如果是这种情况 则会在表示内容的容器中打印 x 整个事情只是第一次测试 看它是否在原则上有效 当我
  • 在 main.dart 中使用 FutureBuilder

    下面的代码总是显示 OnboardingScreen 一段时间 可能是几毫秒 然后显示 MyHomePage 我相信你们都明白我想做什么 我正在使用 FutureBuilder 来检查 getString 方法是否有数据 我有什么错 或者还
  • 如何在 Flutter/Dart 中使用带有基类的 Provider

    我有这样的基类和派生类 abstract class A extends ChangeNotifier class B extends A 我正在使用这样的提供者 ChangeNotifierProvider b create contex
  • 错误:未为类“BuildContext”定义方法“inheritFromWidgetOfExactType”

    今天编译flutter项目的时候出现了这样的错误 This will generate a JSON format file containing all messages that need to be translated pub ca
  • 在 flutter 中使用 Cloud Firestore 创建无限列表

    我目前正在将 Cloud Firestore 与 Streambuilder 小部件一起使用 以便使用 Firestore 文档填充 ListView 小部件 new StreamBuilder
  • MappedListIterable 不是子类型

    我是 flutter 和 dart 的新手 并尝试从 firestore 作为流获取数据并将其提供给我的 ListView 但我不断收到此错误 type MappedListIterable
  • dart,异或两个哈希码总是会返回一个新的唯一哈希码吗?

    我正在编写一个类 需要有一个基于其两个字段的唯一哈希码 我想知道对两个字段哈希码进行异或是否足以为我的对象生成唯一且一致的哈希码 class TypeMatch final Type potentialSubtype final Type
  • 在 Flutter 中使用 Expansion Tile 和 ListView

    我正在尝试从此构建应用程序image https i stack imgur com gJNkO png 但是当我将 ListView 与此扩展图块放在同一页面中时 屏幕变为空 I added shrinkwrap true并工作了 但现在
  • 如何在父视图和子视图中使用组件两次(DI 是共享的,comp 是单例)

    我有一个按钮组件 具有应用程序特定行为 我打算在应用程序中广泛使用它 问题是 当我有一个使用此按钮的父 子视图时 单击父按钮会触发子视图按钮的 操作 如果不这样做 您自然不会明白发生了什么有多年的面向对象编程经验 让年轻的学校新手使用 da
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 如何为发布而不是调试创建密钥库?扑

    我按照使用此网站部署 flutter 的步骤进行操作https flutter io android release https flutter io android release 当我运行 flutter build apk 时出现此错
  • 如何在 Flutter App 中按时间注销?

    如果用户在登录后对应用程序没有反应或不活动超过 5 分钟 我需要从应用程序中注销用户 该应用程序将转到主登录页面 我尝试实施给定的解决方案here https stackoverflow com questions 52602606 how

随机推荐