如何动态修改某一行的文本样式,或某一行中某个范围内文本的样式
可以通过CodeLineSpanBuilder构建特别的样式,请参考CodeLineEditingController的构造函数。
可以通过
CodeLineSpanBuilder构建特别的样式,请参考CodeLineEditingController的构造函数。
这种方式只有要构建组件时生效,想着在界面构建完成后,连接LSP,拿到LSP分析的结果,比如某一行错误,某一行警告,然后通过controller去刷新某一行的样式,似乎没有找到这样的方法
- Editor的数据结构不包含额外的信息,例如错误、警告这些,这些需要你自己维护一个数据结构,在SpanBuilder里面使用。
- 不存在刷新某一行这样的设计,整个Editor就是是一个RenderObject,只能整体刷新(可以使用controller的
forceRepaint函数)。因为当你某一行的样式发生变化时,文字的渲染尺寸很可能发生变化,会引起后续文字渲染位置的变更,所以整体内容重新刷新是一个比较容易的处理方式。
- Editor的数据结构不包含额外的信息,例如错误、警告这些,这些需要你自己维护一个数据结构,在SpanBuilder里面使用。
- 不存在刷新某一行这样的设计,整个Editor就是是一个RenderObject,只能整体刷新(可以使用controller的
forceRepaint函数)。因为当你某一行的样式发生变化时,文字的渲染尺寸很可能发生变化,会引起后续文字渲染位置的变更,所以整体内容重新刷新是一个比较容易的处理方式。
- Editor的数据结构不包含额外的信息,例如错误、警告这些,这些需要你自己维护一个数据结构,在SpanBuilder里面使用。
- 不存在刷新某一行这样的设计,整个Editor就是是一个RenderObject,只能整体刷新(可以使用controller的
forceRepaint函数)。因为当你某一行的样式发生变化时,文字的渲染尺寸很可能发生变化,会引起后续文字渲染位置的变更,所以整体内容重新刷新是一个比较容易的处理方式。
好的,感谢,目前看是可以的。 另外还有个问题,拿到的textSpan已经是高亮好的结果了,如何修改这个TextSpan的样式呢? 例如我需要将某一行的字体变成灰色,或者我需要在某一行的某个位置开始到某个位置结束划线,但是我这样写似乎不可以:
` return TextSpan( // text: textSpan.text, style: style.copyWith( decoration: TextDecoration.underline, decorationThickness: 2, decorationStyle: TextDecorationStyle.wavy, decorationColor: color,
),
children: textSpan.children,
);
`
@onism0106 我不确定是哪里的问题,但是理论上可以加上划线这些样式。