markdown_widget icon indicating copy to clipboard operation
markdown_widget copied to clipboard

自定义样式 : 子节点应该作为标签的children渲染,但是孩子目前是横向连续排列的

Open kuro7766 opened this issue 3 years ago • 6 comments

Is your feature request related to a problem? Please describe. 子节点应该作为标签的children渲染,但是孩子目前是横向连续排列的 image

Describe the solution you'd like abc应该放在红色框的里面或者去掉abc,或者由用户处理

kuro7766 avatar Mar 24 '21 05:03 kuro7766

MarkdownWidget issue

我研究了几天这个库的代码,全都是用Span横向排列来实现的,我觉得有下面这个问题

image 这样的话,连基本的font标签都不支持,那么对于我上面的代码,期望是下面这样,删掉的信息应该以某种方式保留交给用户处理 image

1.

但是目前custom里面的回调的Node没有保存任何关于子节点的信息,因为是横向排列,没有层级的概念,这个和parseHtml函数的解析有关 回调的node应该保存子节点信息,就像这样(当然,没做类型检查),同时把后面多余的蓝色节点删了

custom:(node){
	return Column(Text(node.children[0]),Text(node.children[1]?.children[0]),Text(node.chilren[2]))
}
//对于上图案例,期望的回调
//node.children=[rr(Text),b(Element),RR(Text)]
//其中b可以用户自行继续向下递归

后期这个库如果想扩展标签的话可以写个default标签工具类,(Widget)ElementUtils.handleTag('tag'); 供用户调用,毕竟md不是写html的。

如果子自定义标签还作为父自定义标签的child的话,可能custom回调还需要一个children布局相关的参数,实现起来比较吃力,但是我也简单描述一下另一个方法

2.

//custom回调的Node类型需要变化
Node{
	List<Widget or String> children;
}
custom:(node){
    return handleChildrenLayout(node.children);
}

custom深度优先调用组件构建方法,这样现存的标签就可以复用,用户只需要关心布局问题即可。同时custom回调里也就不必写大段递归解析代码,因为递归写在框架里,不需要用户关心。

之所以用户需要手动处理Widget or String这两种类型,是因为例如对于font,strong标签可能需要对文字控制

abc

<font color='red'>abc</font>

这样嵌套显得过于复杂,毕竟md不是写html的,如果能支持的话更好

kuro7766 avatar Mar 25 '21 03:03 kuro7766

我已经实现了上述第一个功能,就是去掉标签内文字,并交给custom回调给用户处理 image custom回调的log如下 log(67,element.runtimeType.toString()+','+element.textContent); 67 : Element, 67 : Text,ff 67 : Element,ttt 67 : Text,f

kuro7766 avatar Mar 25 '21 10:03 kuro7766

不好意思,最近玩游戏一直没有关注issue,近期我会看一下pr然后处理一下的😄

asjqkkkk avatar Mar 29 '21 02:03 asjqkkkk

我发现html库还有个bug,就是他的parseFragment函数<red/>abc会把 abc当作"red"标签的子节点 https://github.com/dart-lang/html/issues/159

kuro7766 avatar Mar 29 '21 07:03 kuro7766

这样的话可能之前推荐的<avatar size="12" name="tom"/>写法以后就要改成<avatar size="12" name="tom" ></avatar>了,因为html库的bug还没修复,如果修复了,两种标签都支持

kuro7766 avatar Mar 29 '21 07:03 kuro7766

pr算是对功能的一个补足,建议也不错,不过近期可能没有时间去处理。 关于pr的review提了一些建议,没有其他问题了😄

asjqkkkk avatar Apr 04 '21 17:04 asjqkkkk