首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TextDirection在Flutter中到底做了什么?

TextDirection在Flutter中到底做了什么?
EN

Stack Overflow用户
提问于 2021-02-05 11:39:53
回答 1查看 298关注 0票数 0

使用TextDirection会有什么不同。在Flutter中到处都需要它,但其目的并不明确。

例如,给定以下代码:

代码语言:javascript
运行
复制
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的用途是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-05 11:39:53

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

TextDirection所做的是当LTR和RTL文本出现在同一字符串中时,更改它们的顺序块,即作为双向文本。

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

代码语言:javascript
运行
复制
const text = 'Hello שלום';

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

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

代码语言:javascript
运行
复制
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,这意味着第一个在右边。שלום仍然是最后一个,但现在最后一个在左边。有趣的是,它们之间的空间是保持的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66057242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档