Flutter开发中如何在DropdownButton下拉列表内添加按钮并正确传值
问题原因
- 类型不匹配:你定义的
DropdownButton<String>指定了泛型为String,意味着它的value属性、所有DropdownMenuItem的value属性都必须是String类型,但你将状态变量dropdownValue声明为Text组件类型,二者完全不匹配。 - 下拉项value配置错误:你前两个DropdownMenuItem的value都设置为空串
'',最后一项Create按钮甚至没有配置value属性,既没有和默认值对应的value,也存在重复/缺失的问题,DropdownButton自然无法匹配到合法的选中项。
修复方案
你不需要获取Text组件的值,直接把状态变量改为String类型即可,同时给所有下拉项配置唯一的value值,针对最后一项Create按钮可以给一个特殊标记值,选中时直接触发对应逻辑,不更新选中值即可,修改后代码如下:
class _TodoPageState extends State<TodoPage> { // 改为String类型存储选中值 String dropdownValue = '123'; @override Widget build(BuildContext context) { return SafeArea( child: Center( child: Column( children: [ MyTabBar(), Row( children: [ Expanded( child: Container( margin: EdgeInsets.only(left: 3, top: 5), child: Row( children: [ Ink( width: 152, height: 45, padding: EdgeInsets.all(6), decoration: BoxDecoration( border: Border.all(color: Colors.black, width: 2), borderRadius: BorderRadius.circular(10), ), child: DropdownButtonHideUnderline( child: DropdownButton<String>( value: dropdownValue, isExpanded: true, icon: Image.asset('assets/down-list-arrow.png'), iconSize: 10, elevation: 16, onChanged: (newValue) { // 选中的是创建按钮的特殊值,直接触发逻辑,不更新选中态 if(newValue == '_create_'){ // 这里写你点击创建按钮要执行的逻辑 return; } // 普通选项正常更新选中值 setState(() { dropdownValue = newValue!; }); }, items: [ // 每个选项配置唯一value,和显示的文本对应 DropdownMenuItem(child: Text('123'), value: '123'), DropdownMenuItem(child: Text('456'), value: '456'), // 最后一项给特殊value,child可以直接放TextButton DropdownMenuItem( value: '_create_', child: TextButton( child: Text('Create'), onPressed: () { // 这里也可以直接写创建逻辑,和onChanged里二选一即可 }, ) ) ], ), ), ) ], ), ), ), ], ), MyListView() ], ), )); } }
效果示意图


内容的提问来源于stack exchange,提问作者can çağlar kırıcı
相关产品推荐
相关产品推荐

