首先使用了flutter pub中的auto_size_text,不管设置max_font_size、min_font_size还是style,依然不符合想要的显示效果,所以自己实现了一下
先上实现效果
初始的widget大小
此时更改文字内容不改变widget尺寸
文字大小不变,widget尺寸增大
尺寸变小
实现逻辑:
- 首先测量当前显示text的尺寸大小,因为使用的自适应尺寸,所以实际测量的是父组件的大小,然后减去父组件中其他组件的大小得到当前text widget的最大尺寸
- 根据最大尺寸换算出最大的font size
- 根据文字内容和font size测量出对应的宽高
- 当宽度大于widget的最大宽度时(因为实际上有内边距,所以需要多减去一点)font size减小
- 继续测量text宽高当高度大于最大高度时(同有内边距)行数增加
- 行数增加后对应的test宽度应该减去一行
- 4、5、6循环直到不满足条件此时font size是满足widget尺寸的最大值(记得边缘检测)
代码由于没有整理就不贴了
等有空时上传pub
(大概率忘记或者没空或者懒得做)