Flutter 中的富文本组件

Rich text components in Flutter

我想用 Flutter 制作一个混合应用程序。我正在查看的一种特定类型的组件听起来像这样:

普通的静态文本不够丰富,无法显示所有这些信息。我目前的想法是让每个角色都成为一个自定义的小部件,其中嵌入了这些数据。

如果每个汉字(大约有 5000 个常用字符)都有自己丰富的数据格式,这个任务会非常庞大​​。

关于如何在 Flutter 中有效地解决这个问题有什么建议吗?

提前致谢!

有几种方法可以做到这一点。使用小部件绝对是一种选择,但这可能会给您带来长期的问题 运行.

让我们把它分成两部分:


1:显示文字

如果你这样做,我建议你使用 RichText with many TextSpan children. You could create a custom class that accepts the string, splits it into characters, and puts each character in its own TextSpan. By using TextSpan.recognizer. You could then either use a TapGestureRecognizer with onTap to show the information when tapped if you don't need the position at which it was tapped, or onTapDown/onTapUp 而不是使用小部件(例如,如果你想在点击发生的地方显示一个弹出窗口,而不是底部 sheet 出现了)。


2:显示信息

因为你想要处理大量的字符,我建议不要在代码中全部完成,而是以其他一些易于操作的格式处理字符,例如 JSON。这样你就可以做一些事情,比如将数据分成块并根据需要加载它们,and/or 从网络服务器获取它们。

您的数据可能类似于:

{
  "家": {
    "pronunciation": "jia",
    "audio": "path/to/sound.m4a",
    "animation": "path/to/animation.gif"
  },
  ...
}

从理论上讲,您甚至可以做一些事情,例如在字符首次显示或单击时开始加载发音文件。

点击角色时,您可以:

  1. 检查缓存中是否有数据
  2. 如果需要,从 network/disk
  3. 加载数据
  4. 打开底部 sheet 或弹出显示发音信息 + 音频和绘图动画按钮