想要实现一个功能:在一个控件内展示一个文本,当文本过长时控件可上下滑动。
一:设置控件最大显示高度,最小显示高度。给Text设置父控件SingleChildView,再给SingleChildView设置父控件Container,Container的constraints设置最大高度和最小高度。 但是发现,并没有实现想要的效果,SingleChildView直接将container撑满了最大高度。🤔️为什么SingleChildView会默认撑满控件最大高度呢?源码中可知:SingleChildScrollView 默认会将其子部件的大小设置为最大尺寸,以便在滚动时可以显示所有内容。这种行为是因为 SingleChildScrollView 的默认行为是将其子部件大小设置为尽可能大,从而确保其内容不会被裁剪或截断,并且可以在滚动视图中完全显示。
最终发现:将SingleChildView父控件设置为IntrinsicHeight,即可达到想要的效果:
代码如下:
``IntrinsicHeight(
child: SingleChildScrollView(
child: Text.rich(
textAlign: TextAlign.start,
TextSpan(children: [
TextSpan(
text: model.content,
style: TextStyle(
fontSize: Dimens.font_sp14,
color: ColorValues.color606266,
height: 1.2)),
]),
),
))``
IntrinsicHeight作用是什么?将子部件包裹在 IntrinsicHeight 中,它会测量子部件的最大高度,并将这个最大高度应用到所有的子部件上,使得它们的高度都相同,等于子部件的最大自然高度。