re-editor icon indicating copy to clipboard operation
re-editor copied to clipboard

如何动态修改某一行的文本样式,或某一行中某个范围内文本的样式

Open onism0106 opened this issue 1 year ago • 3 comments

onism0106 avatar May 14 '24 12:05 onism0106

可以通过CodeLineSpanBuilder构建特别的样式,请参考CodeLineEditingController的构造函数。

MegatronKing avatar May 15 '24 04:05 MegatronKing

可以通过CodeLineSpanBuilder构建特别的样式,请参考CodeLineEditingController的构造函数。

这种方式只有要构建组件时生效,想着在界面构建完成后,连接LSP,拿到LSP分析的结果,比如某一行错误,某一行警告,然后通过controller去刷新某一行的样式,似乎没有找到这样的方法

onism0106 avatar May 17 '24 09:05 onism0106

  1. Editor的数据结构不包含额外的信息,例如错误、警告这些,这些需要你自己维护一个数据结构,在SpanBuilder里面使用。
  2. 不存在刷新某一行这样的设计,整个Editor就是是一个RenderObject,只能整体刷新(可以使用controller的forceRepaint函数)。因为当你某一行的样式发生变化时,文字的渲染尺寸很可能发生变化,会引起后续文字渲染位置的变更,所以整体内容重新刷新是一个比较容易的处理方式。

MegatronKing avatar May 17 '24 11:05 MegatronKing

  1. Editor的数据结构不包含额外的信息,例如错误、警告这些,这些需要你自己维护一个数据结构,在SpanBuilder里面使用。
  2. 不存在刷新某一行这样的设计,整个Editor就是是一个RenderObject,只能整体刷新(可以使用controller的forceRepaint函数)。因为当你某一行的样式发生变化时,文字的渲染尺寸很可能发生变化,会引起后续文字渲染位置的变更,所以整体内容重新刷新是一个比较容易的处理方式。
  1. Editor的数据结构不包含额外的信息,例如错误、警告这些,这些需要你自己维护一个数据结构,在SpanBuilder里面使用。
  2. 不存在刷新某一行这样的设计,整个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 avatar Jun 06 '24 08:06 onism0106

@onism0106 我不确定是哪里的问题,但是理论上可以加上划线这些样式。

MegatronKing avatar Jun 06 '24 08:06 MegatronKing