Flutter如何设置两个TextButton宽度以填满父级SizedBox可用空间
需求说明
将父级SizedBox内的两个TextButton宽度拉伸至填满父容器横向可用空间,保留按钮原有垂直居中排列位置,其他样式配置不变。
实现方案
方案一:调整Column交叉轴对齐属性(改动最小,推荐)
承载两个按钮的Column默认交叉轴对齐为居中,修改为横向拉伸即可让所有子元素自动撑满横向宽度,占位用的空白SizedBox为透明背景,拉伸后无视觉影响。
修改对应Column代码如下,仅需新增1行配置:
child: Column( // 新增该行配置,子元素自动横向拉伸填满可用宽度 crossAxisAlignment: CrossAxisAlignment.stretch, children: [ SizedBox( height: 90, ), SizedBox( height: 10, ), // 第一个TextButton原有代码保持不变 TextButton( style: ButtonStyle( shape: MaterialStateProperty.all< RoundedRectangleBorder>( RoundedRectangleBorder( borderRadius: BorderRadius.circular(18.0), ), ), backgroundColor: MaterialStateProperty.all<Color>( kcPrimaryColor), foregroundColor: MaterialStateProperty.all<Color>( Colors.white)), onPressed: () {}, child: Text("Upload Picture"), ), // 按钮间距保持不变 SizedBox(height: 10), // 第二个TextButton原有代码保持不变 TextButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => MusicPreferences()), ); }, child: Text("I will do it later"), style: ButtonStyle( shape: MaterialStateProperty.all< RoundedRectangleBorder>( RoundedRectangleBorder( borderRadius: BorderRadius.circular(18.0), ), ), backgroundColor: MaterialStateProperty.all<Color>( Colors.transparent), foregroundColor: MaterialStateProperty.all<Color>( kcPrimaryColor)), ), ], ),
如果需要按钮左右保留边距不贴边,可给每个TextButton外层包裹Padding组件设置水平边距:
Padding( padding: const EdgeInsets.symmetric(horizontal: 24), child: TextButton(/* 原有按钮代码 */), )
方案二:单独修改TextButton样式
如果不想改动Column配置,可单独给每个TextButton的ButtonStyle新增minimumSize属性即可:
style: ButtonStyle( // 新增该行配置,宽度拉伸至最大可用值,第二个参数为按钮高度可按需调整 minimumSize: MaterialStateProperty.all(const Size(double.infinity, 48)), // 原有其他style配置保持不变 ... )
内容的提问来源于stack exchange,提问作者Dimitris Konstantinou
相关产品推荐
相关产品推荐

