使用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
的用途是什么呢?
发布于 2021-02-05 11:39:53
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,这意味着第一个在右边。שלום
仍然是最后一个,但现在最后一个在左边。有趣的是,它们之间的空间是保持的。
https://stackoverflow.com/questions/66057242
复制相似问题