Flutter中Expanded内设置Padding为何会影响外部其他元素?
问题原因
Padding组件被放在了Expanded的子节点外层,而Column中的Expanded默认会占用除固定高度子节点外的所有剩余垂直空间- 代码中设置的
EdgeInsets.symmetric(vertical: 30.0)会给整个Expanded的可渲染区域添加上下各30的内边距,Padding组件本身的尺寸会撑满Expanded的分配空间,垂直方向的内边距会改变内部内容的位置分布,同时如果顶部区域还有其他自适应高度的内容,Expanded会被撑开更高的高度,直接挤压底部的Footer text位置。
修复方案
只给需要加内边距的顶部文本套Padding即可,不要将Padding放在整个Expanded的子节点外层,修改后代码如下:
return Scaffold( body: SafeArea( child: Column( children: [ Expanded( child: Column( children: [ Padding( padding: const EdgeInsets.symmetric( vertical: 30.0, horizontal: 80.0, ), child: Text('Top text'), ), // 此处可添加顶部区域其他内容 ], ), ), Text('Footer text'), ], ), ), );
如果需要整个顶部区域保留通用的水平内边距,可拆分内边距设置:水平内边距放在Expanded子节点外层,垂直内边距仅加在对应需要的元素外层,避免全局垂直内边距影响整体布局。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

