TextDirection 在 Flutter 中到底做了什么
What does TextDirection really do in Flutter
使用 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,这意味着第一个在右边。 שלום
仍然是最后一个,但现在最后一个在左边。有趣的是,space在他们之间保持。
使用 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,这意味着第一个在右边。 שלום
仍然是最后一个,但现在最后一个在左边。有趣的是,space在他们之间保持。