问题描述
使用 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
的目的是什么?
解决方法
TextDirection
不会更改从左到右 (LTR) 文本(如英语或俄语)中的字符顺序。它也不会更改从右到左 (RTL) 文本(如阿拉伯语或希伯来语)中的字符顺序。
TextDirection
的作用是改变 LTR 和 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,这意味着第一个在右边。 שלום
仍然是最后一个,但现在最后一个在左边。有趣的是,它们之间保持着空间。