首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Flutter中按字符换行(不在空格或‘-’处换行)?

在Flutter中,可以使用TextPainter来实现按字符换行的效果。下面是一个示例代码:

代码语言:txt
复制
import 'package:flutter/material.dart';

class WrapText extends StatelessWidget {
  final String text;

  WrapText({required this.text});

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints constraints) {
        final textPainter = TextPainter(
          text: TextSpan(
            text: text,
            style: TextStyle(fontSize: 16),
          ),
          maxLines: null,
          textDirection: TextDirection.ltr,
        )..layout(maxWidth: constraints.maxWidth);

        final textSpan = textPainter.text;
        final textLength = textSpan.toPlainText().length;

        List<InlineSpan> wrappedText = [];
        int start = 0;

        for (int end = 1; end <= textLength; end++) {
          final substring = text.substring(start, end);
          textPainter.text = TextSpan(text: substring, style: TextStyle(fontSize: 16));
          textPainter.layout();

          if (textPainter.didExceedMaxLines) {
            wrappedText.add(TextSpan(text: text.substring(start, end - 1)));
            start = end - 1;
          }
        }

        wrappedText.add(TextSpan(text: text.substring(start)));

        return RichText(
          text: TextSpan(children: wrappedText),
        );
      },
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      body: Center(
        child: WrapText(
          text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed euismod, nunc id aliquam tincidunt, nisl nunc lacinia nunc, id lacinia nunc nunc id nunc.',
        ),
      ),
    ),
  ));
}

在上述示例中,我们创建了一个自定义的WrapText小部件,它接受一个text参数作为输入文本。在build方法中,我们使用LayoutBuilder来获取父容器的约束条件,然后使用TextPainter来测量文本的宽度。

接下来,我们遍历输入文本的每个字符,并逐渐增加字符的数量,直到文本超过父容器的宽度为止。一旦超过了最大宽度,我们将之前的字符添加到wrappedText列表中,并更新起始位置。最后,我们将剩余的字符也添加到wrappedText列表中。

最后,我们使用RichText小部件来显示换行后的文本。

这种方法可以在不依赖空格或连字符的情况下实现按字符换行的效果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

「译文」如何在YAML输入多行字符串?

> 折叠样式[1]删除了字符的单个换行符(但在结尾增加一个,并将双换行符转换为单换行符)。...| 字面风格[2]将字符的每一个换行(newline)都变成一个字面换行(literal newline),并在最后加上一个换行。...另外,也可以使用折叠式风格(用>表示),其中每个换行符都被折叠成一个空格,除非它结束了一个空行一个缩进较大的行。 ️ 建议: 将格式化的文本(特别是Markdown)作为值插入使用这个 |。...这是唯一可以在不添加空格的情况下将一个很长的标记(URL)跨行分隔的方法。也许在中间添加换行符是很有用的。...\n表示“换行符”(在JavaScript为\n),“其他功能”下除外。“前导空格”应用于第一行之后(建立缩进): 示例 注意“空格”之前一行的末尾空格

5.1K20

Python 换行符以及如何在 Python 输出时不换行

在本文中,你将学习: 如何在 Python 识别换行符 如何在字符串和打印语句中使用换行符 如何编写不会在字符串末尾添加换行符的打印语句 我们开始吧!...✨ 换行符 Python 换行符是: 它包含两个字符: 一条反斜线 字母 n 如果你在字符串中看到此字符,则表示当前行在该点结束,并在其后立即开始新行: 你也可以在格式化字符串(f-strings...如果在此示例中使用默认值: 我们会看到结果打印为两行: 但是,如果我们将 end 的值设置为 " ": 将在字符串的末尾添加一个空格,而不是新的行字符 \n,因此两个打印语句的输出将显示在同一行:...类似的,我们可以使用它在同一行打印可迭代的值: 输出结果是: 文件换行符 在文件也可以找到换行符 \n,但是它是“隐藏的”。当你在文本文件中看到新行时,其实已经插入新行字符 \n。...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

13.9K10
  • 现代配置指南——YAML 比 JSON 高级在哪?

    众所周知,在实际项目配置很少有简单的对象数组,大多都是对象和数组相互嵌套而成。在 js 我们称之为对象数组,而在 yaml 我们叫 复合结构。...纯量 纯量比较简单,对应的就是 js 的基本数据类型,支持如下: 字符串 布尔 数值 null 时间 比较特殊的两个,null 用 ~ 符号表示,时间大多用 2021-12-21 这种格式表示,: who...然而在 YAML 更简单,不需要加任何符号,直接换行即可: cmd: docker run --name my-nginx -d nginx YAML 默认会把换行符转换成空格,因此转换后...JSON 如下,正是我们需要的: { "cmd": "docker run --name my-nginx -d nginx" } 然而有时候,我们的需求是保留换行符,并不是把它转换成空格,又该怎么办呢...,如何在代码(JS)里获取?

    2.7K20

    Google Java 编程风格指南

    2.3 特殊字符 2.3.1 空白字符 除了行结束符序列,ASCII水平空格字符(0x20,即空格)是源文件唯一允许出现的空白字符,这意味着: 所有其它字符的空白字符都要进行转义。...4.4 列限制:80100 一个项目可以选择一行80个字符100个字符的列限制,除了下述例外,任何一行如果超过这个字符数限制,必须自动换行。...方法名构造函数名与左括号留在同一行。 逗号(,)与其前面的内容留在同一行。 4.5.2 自动换行时缩进至少+4个空格 自动换行时,第一行后的每一行至少比第一行多缩进4个空格(注意:制表符不用于缩进。...数组初始化,大括号内的空格是可选的,即 newint[]{5,6}和 newint[]{5,6}都是可以的。 Note:这个规则并不要求禁止一行的开关结尾需要额外的空格,只对内部空格做要求。...把这个结果切分成单词,在空格其它标点符号(通常是连字符)处分割开。 - 推荐:如果某个单词已经有了常用的驼峰表示形式,它的组成将它分割开(”AdWords”将分割成”ad words”)。

    1K11

    Java 编程风格军规,看这一篇就够了

    2.3 特殊字符 2.3.1 空白字符 除了行结束符序列,ASCII水平空格字符(0x20,即空格)是源文件唯一允许出现的空白字符,这意味着: 所有其它字符的空白字符都要进行转义。...4.4 列限制:80100 一个项目可以选择一行80个字符100个字符的列限制,除了下述例外,任何一行如果超过这个字符数限制,必须自动换行。...方法名构造函数名与左括号留在同一行。 逗号(,)与其前面的内容留在同一行。 4.5.2 自动换行时缩进至少+4个空格 自动换行时,第一行后的每一行至少比第一行多缩进4个空格(注意:制表符不用于缩进。...数组初始化,大括号内的空格是可选的,即 newint[]{5,6}和 newint[]{5,6}都是可以的。 Note:这个规则并不要求禁止一行的开关结尾需要额外的空格,只对内部空格做要求。...把这个结果切分成单词,在空格其它标点符号(通常是连字符)处分割开。 - 推荐:如果某个单词已经有了常用的驼峰表示形式,它的组成将它分割开(”AdWords”将分割成”ad words”)。

    95840

    轻松拿捏C语言——关于 printf 和 scanf 那些事儿

    scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符。所以,用户输入的数据之间,有一个多个空格不影响 scanf() 解读数据。...scanf() 读取用户输⼊时, %d 占位符会忽略起⾸的空格,从 - 开始获取数据,读 取到 -13 停下来,因为后面的 ....• %s :字符串。 • %[] :在方括号中指定⼀组匹配的字符 %[0-9] ),遇到不在集合之中的字符,匹配将会停止。...如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表示跳过零个多个空白字符。 下面要特别说⼀下占位符 %s ,它其实不能简单地等同于字符串。...这也意味着, scanf() 不适合读取可能包含空格字符串,⽐书名歌曲名。另外, scanf() 遇到 %s 占位 符,会在字符串变量末尾存储⼀个空字符 \0 。

    36910

    Google 出品的 Java 编码规范,强烈推荐,权威又科学!

    2.3 特殊字符 2.3.1 空白字符 除了行结束符序列,ASCII水平空格字符(0x20,即空格)是源文件唯一允许出现的空白字符,这意味着: 1、所有其它字符的空白字符都要进行转义。...(言下之意就是大胆去用非ASCII字符,如果真的有需要的话) 源文件结构 一个源文件包含(顺序地): 1、许可证版权信息(如有需要) 2、package语句 3、import语句 4、一个顶级类(只有一个...4.4 列限制:80100 一个项目可以选择一行80个字符100个字符的列限制,除了下述例外,任何一行如果超过这个字符数限制,必须自动换行。...2、把这个结果切分成单词,在空格其它标点符号(通常是连字符)处分割开。 推荐:如果某个单词已经有了常用的驼峰表示形式,它的组成将它分割开(”AdWords”将分割成”ad words”)。...7.3 哪里需要使用Javadoc 至少在每个public类及它的每个public和protected成员使用Javadoc,以下是一些例外: 7.3.1 例外:不言自明的方法 对于简单明显的方法

    2.7K40

    Google Java编程风格规范(2020年4月原版翻译)

    2.3 特殊字符 2.3.1 空白字符 除了行结束符序列,ASCII水平空格字符(0×20,即空格)是源文件唯一允许出现的空白字符,这意味着: 所有其它字符的空白字符都要进行转义。...4.8.4.1 缩进 与其它块状结构一致,switch块的内容缩进为2个空格。 每个switch标签后新起一行,再缩进2个空格,写下一条多条语句。...把这个结果切分成单词,在空格其它标点符号(通常是连字符)处分割开。 推荐:如果某个单词已经有了常用的驼峰表示形式,它的组成将它分割开(”AdWords”将分割成”ad words”)。...当描述无法在一行容纳,连续行需要至少再缩进4个空格。 7.2 摘要片段 每个类成员的Javadoc以一个简短的摘要片段开始。...7.3 哪里需要使用Javadoc 至少在每个public类及它的每个public和protected成员使用Javadoc,以下是一些例外: 7.3.1 例外:不言自明的方法 对于简单明显的方法getFoo

    1.1K20

    Java编程风格

    1.3 特殊字符 1.3.1 空白字符 除了行结束符序列(这里指源码的换行),ASCII水平空格字符( 0x20,即 空格 )是源文件唯一允许出现的空白字符,这意味着: 所有其它字符的空白字符都要进行转义...(见3.1.2节的代码示例) 3.3 一行一个语句 每个语句后要换行。 3.4 列限制:100 一行100个字符的列限制,除了下述例外,任何一行如果超过这个字符数限制,必须自动换行。...把这个结果切分成单词,在空格其它标点符号(通常是连字符)处分割开。 推荐:如果某个单词已经有了常用的驼峰表示形式,它的组成将它分割开(”AdWords”将分割成”ad words”)。...当描述无法在一行容纳,连续行需要至少再缩进4个空格。 6.2 摘要片段 每个类成员的Javadoc以一个简短的摘要片段开始。...6.3 哪里需要使用Javadoc 至少在每个public类及它的每个public和protected成员使用Javadoc,以下是一些例外: 6.3.1 例外:不言自明的方法 对于简单明显的方法getFoo

    2.1K20

    Excel技巧:快速处理单元格内的换行

    标签:Excel技巧,VBA 在Excel,如果我们想要在一个单元格中将内容显示在不同行,可以在需要断行使用Alt+回车键。然而,有时候会反过来。...使用“查找和替换”功能 最简单的方法是使用Excel的“查找和替换”功能,打开“查找和替换”对话框,并选择“替换”选项卡,将光标置于“查找内容”的文本框,然后Ctrl+J键或者Alt+0010(这可能需要通过数字小键盘输入...如果“替换为”文本框的内容为空,将删除换行符,如果在“替换为”文本框输入空格任何想要的字符),所有换行符将被空格选择的字符)替换。...xlByColumns, _ MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub 接下来,探讨换行符拆分单元格内容的技术...图1 选择要拆分的单元格,单击功能区“数据”选项卡的“分列”命令,在“文本分列向导”第2步的“分隔符号”选择“其他”,使用Ctrl+JAlt+0010插入换行符,如下图2所示。

    2.8K20

    css自动换行属性与保留空白属性冲突_css换行样式

    keep-all 只能在半角空格字符换行。 word-break:break-all 所有的都换行,右侧换行没有空隙。 word-wrap 属性允许长单词 URL 地址换行到下一行。...语法: word-wrap: normal | break-word ; normal 只在允许的断字点换行(浏览器保持默认处理)。 break-word 在长单词 URL 地址内部进行换行。...word-wrap:break-word 如果这一行文字有可以换行的点,空格、单词字符,让这些换行换行,这种换行会出现不对齐,右侧空白的情况。...说明: CSS3将 改名为 ;浏览器支持情况:Chrome(23.0+)、Safari(6.1+)、Opera(15.0+)、iOS...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.8K30

    python(三)

    = s.rpartition(',') print(li) # split()和rsplit()方法,如果不指定分隔符,则字符的任何空白符号(包括空格换行符,制表符等)都会被认为是分隔符 s...**join()**:效率比直接使用’+’拼接高 # join()方法是将列表其他可迭代对象字符串以指定的字符串连接, 如果当中含有非字符串的元素,则会抛出异常 li = ['a', 'b'...c不在左端,所以不会删除c **eval()**: print(eval('1 + 1')) # eval()把任意字符串转换为Python表达式并求值 a = 3 b = 4 print(...)) # 单行模式,此时.可以匹配换行符,会把换行符变为\n print(re.findall(r'^.+$', text, re.M)) # 多行模式,会把每一行变为列表的元素...:,后不能跟空格,否则匹配不上。

    59220

    常用功能加载宏——替换不确定数量的空白

    工作碰到过这种情况:有些外部收集来的资料,由于表格制作者不知道如何在单元格输入换行符,他的做法是设置单元格格式自动换行,为了达到排版换行目的,是输入了一些空格用来占位的,这种表格在列宽变化了后,很可能就会变的有点乱...,替换为真正的换行符或者其他符号就很有必要了: ?...所以程序必须考虑到多段不确定空白的情况: 使用InStr找到空格开始的位置 使用Loop找到非空白 这样就确定了一段非空白的起止位置。...首先在customUI.xml的menu id="rbmenuString"增加代码: <button id="rbbtnTrimSpace" label="替换<em>空格</em>" onAction...确保选中的是单元格 If TypeName(Selection) = "Range" Then Set rng = Selection '如果替换为空字符

    1.1K31

    Google Java编程风格指南

    2.3 特殊字符 2.3.1 空格字符 除了换行符外,ASCII水平空白字符(0x20)是源码文件唯一支持的空格字符。这意味着: 所有其他空白字符将被转义。 Tab字符不被用作缩进控制。...4.1.3 空语句块:使代码更简洁 一个空的语句块,可以在左大括号之后直接接右大括号,中间不需要空格换行。但是当一个由几个语句块联合组成的语句块时,则需要换行。...把这个结果切分成单词,在空格其它标点符号(通常是连字符)处分割开。 推荐:如果某个单词已经有了常用的驼峰表示形式,它的组成将它分割开(AdWords将分割成ad words)。...当描述无法在一行容纳,连续行需要至少再缩进4个空格(注:如果你的缩进统一采用采用4个空格,那么这里就应该是8个空格)。 7.2 摘要片段 每个类成员的Javadoc以一个简短的摘要片段开始。...7.3 在哪里使用Javadoc 至少在每个public类及它的每个public和protected成员使用Javadoc,以下是一些例外: 7.3.1 例外:不言自明的方法 对于简单明显的方法getFoo

    1K20

    一文搞定Python正则

    =pattern) 非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?...[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。...\n 匹配一个换行符。等价于\x0a和\cJ。 \r 匹配一个回车符。等价于\x0d和\cM。 \s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。...其他六个属性:L:字母;M:标记符号(一般不会单独出现);Z:分隔符(比如空格换行等);S:符号(比如数学符号、货币符号等);N:数字(比如阿拉伯数字、罗马数字等);C:其他字符。...多个标志可以通过位 OR(|) 它们来指定。

    1.7K10

    Vscode笔记-24款插件

    只需注意左侧的灯泡,然后一下它即可了解如何在光标下转换代码。 json2ts 可将JSON转换为TypeScript接口。您可以从VS Code浏览和安装扩展。...只需在模板CSS/SCSS声明类,然后在任何地方都可以看到它。..."endOfLine": "lf" //检测换行符类型,如果出现大量换行符报错,可以修改为auto不检测 } 更多配置可参考Pretter文档 5、其它 如果还想配置vue、react文件相关的格式化...Ctrl + Alt + L 多光标支持 注释当前文档中所有由扩展名插入的日志消息 要注释当前文档扩展名插入的所有日志消息,只需按alt + shift + c 取消注释当前文档扩展名插入的所有日志消息...取消注释当前文档由扩展名插入的所有日志消息的全部操作是alt + shift + u 从当前文档删除所有由扩展名插入的日志消息 要从当前文档删除所有由扩展名插入的日志消息,只需按alt + shift

    10.6K21

    Python 正则表达式大全(下)

    多个标志可以通过位 OR(|) 它们来指定。...由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素( r'/t',等价于'//t')匹配相应的特殊字符。 下表列出了正则表达式模式语法的特殊元素。...模式 描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾。 . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 [...]...用来表示一组字符,单独列出:[amk] 匹配 'a','m''k' [^...] 不在[]字符:[^abc] 匹配除了a,b,c之外的字符。 re* 匹配0个多个的表达式。...\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 的 'er',但不能匹配 "verb" 的 'er'。 \B 匹配非单词边界。'

    97810
    领券