0

使用 TextDirection 有什么不同。在 Flutter 中到处都需要它,但目的尚不清楚。

例如,给定以下代码:

const text = 'Hello';
final textSpan = const TextSpan(
  text: text,
  style: TextStyle(fontSize: 50, color: Colors.black),
);

final TextPainter textPainter = TextPainter()
  ..textDirection = TextDirection.ltr
  ..text = textSpan
  ..layout();
textPainter.paint(canvas, Offset(0, 0));

文本方向设置为TextDirection.ltr。这打印Hello

但是,将文本方向设置为TextDirection.rtl不会给出olleH. 还是Hello。那么这样做的目的是TextDirection什么?

4

1 回答 1

3

TextDirection不会更改从左到右 (LTR) 文本(如英语或俄语)中的字符顺序。它也不会改变从右到左 (RTL) 文本(如阿拉伯语或希伯来语)中的字符顺序。

TextDirectionLTR 和 RTL 文本出现在同一个字符串中时,即作为双向文本,它们的作用是改变它们的顺序块。

您可以在以下示例中看到这一点:

const text = 'Hello שלום';

该字符串包含 LTR 文本 (Hello) 和 RTL 文本 (שלום)。LTR 文本位于字符串的开头。因此,当您处于 LTR 环境时,Hello应在左侧(第一个)和שלום右侧(最后一个)绘制。

事实上,你可以观察到这是真的:

const text = 'Hello שלום';
final textSpan = const TextSpan(
  text: text,
  style: TextStyle(fontSize: 30, color: Colors.black),
);
final TextPainter textPainter = TextPainter()
  ..textDirection = TextDirection.ltr  //       <-- LTR
  ..text = textSpan
  ..layout();
textPainter.paint(canvas, Offset(0, 0));

这导致:

在此处输入图像描述

但是将方向更改为TextDirection.rtl,您将得到以下结果:

在此处输入图像描述

Hello仍然是第一个,但由于现在环境是 RTL,这意味着第一个在右边。שלום仍然是最后一个,但现在最后一个在左边。有趣的是,它们之间保持着空间。

于 2021-02-05T03:39:53.443 回答