openkraken / kraken

A web standards-compliant, high-performance rendering engine based on Flutter.
https://openkraken.com
Apache License 2.0
4.92k stars 305 forks source link

动态改变文字宽度,外层div未自适应 #1440

Closed xuzhongpeng closed 1 year ago

xuzhongpeng commented 2 years ago

使用的 Kraken 版本 | What version of kraken are you using

all

**重现代码 | Code example:

var div = document.createElement('div')
div.style.width = '100px';
div.style.padding = '10px';
div.style.backgroundColor = 'green';
var text = document.createTextNode('无影🐮无影🐮无影🐮无影🐮无影🐮无影🐮无影🐮无影🐮无影🐮无影🐮无影🐮');
div.appendChild(text);

setTimeout(() => {
  div.style.width = '300px';
}, 4000)

document.body.appendChild(div);

预期结果 | Expected results:

https://user-images.githubusercontent.com/24218764/177327753-0ba943e4-5eb4-41c3-addd-af67ecdad1d8.mov

实际结果 | Actual results:

https://user-images.githubusercontent.com/24218764/177327815-45b3e021-94bd-4533-bc34-7c798f318ba7.mov

xuzhongpeng commented 2 years ago

https://github.com/flutter/flutter/pull/101493

问题出在box中的getDistanceToActualBaseline会从缓存中取值,它仅仅当它在markNeedsLayout时清除缓存。 但我们重新设置div的宽度时,只是调用了_markSelfAndParentNeedsLayout令自身和父节点markNeedsLayout,所以改变div宽度子节点的getDistanceToActualBaseline一直是初始时计算出来的202

flutter3.1.x已经解决了该bug

xuzhongpeng commented 1 year ago

该问题依赖Flutter官方解决,不便在kraken/webf中解决,暂时关闭