Flutter应用中如何设置点击DropdownButton后弹出下拉项的padding?
解决方案
DropdownButton的弹出下拉菜单属于Overlay独立层级渲染,父容器的padding、ButtonTheme的padding仅会作用于按钮本身的布局,不会影响Overlay层级的菜单位置,所以需要用DropdownButton专门控制菜单样式的属性调整:
方法1:使用原生DropdownButton自带属性调整(推荐,Flutter 2.11+ 支持)
直接给DropdownButton添加两个参数即可:
offset:控制下拉菜单相对按钮的偏移量,第二个参数为垂直偏移,正数代表向下偏移,按需调整数值即可让菜单刚好显示在按钮下方menuPadding:控制整个下拉菜单的内外边距,可单独设置菜单顶部的padding
修改后的代码参考:
ButtonTheme( alignedDropdown: true, padding: EdgeInsets.only(left: 0.0, right: 0.0, top: 100, bottom: 0.0), child: DropdownButton( // 新增以下两行调整菜单位置 offset: Offset(0, 8), // 菜单向下偏移8px,可按需调整 menuPadding: EdgeInsets.only(top: 4), // 菜单顶部内边距4px,可按需调整 menuMaxHeight: 300.0, hint: _dropDownValue == null ? Text("---SELECT---", style: TextStyle(color: Colors.black)) : Text( _dropDownValue, style: TextStyle(color: Colors.blue, fontSize: 20), ), isExpanded: true, iconSize: 30.0, icon: Icon(Icons.arrow_drop_down_circle), iconDisabledColor: Colors.red, iconEnabledColor: Colors.green, style: TextStyle(color: Colors.black), dropdownColor: Colors.white, items: answer.map( (val) { return DropdownMenuItem<String>( value: val, child: Text(val), ); }, ).toList(), onChanged: (val) { setState( () { _dropDownValue = val; }, ); }, ), ),
方法2:旧版本Flutter可使用第三方扩展库
如果你的项目Flutter版本低于2.11,没有上述两个属性,可以使用dropdown_button2库,它完全兼容原生DropdownButton的用法,同时支持菜单偏移、边距、自定义装饰等更多定制能力,替换组件后同样设置offset和menuPadding参数即可生效。
内容的提问来源于stack exchange,提问作者Terin Tittu
相关产品推荐
相关产品推荐

