Flutter中如何获取DropdownButton的显示文本及对应选中值?
给你两种可行的解决方案,按需选择:
方法一:直接绑定整个数据对象作为选项值
这种方式最直接,把整个FGItem对象设为DropdownMenuItem的value,onChanged回调就能直接拿到包含id和fg_name的完整数据。
步骤:
- 先确认你的数据模型类(如果还没定义):
class FGItem { final String id; final String fgName; FGItem({required this.id, required this.fgName}); // 匹配你的数据集格式,从JSON解析的方法 factory FGItem.fromJson(Map<String, dynamic> json) { return FGItem( id: json['id'], fgName: json['fg_name'], ); } }
- 修改DropdownButton代码:
return Obx(() => DropdownButton<FGItem>( focusColor: Colors.blue, underline: SizedBox(), isExpanded: true, isDense: true, hint: Text("Select from List"), // 选中值现在是FGItem对象,默认null value: fgTaskController.selectedFG.value, items: fgTaskController.fgList.map((item) { return DropdownMenuItem<FGItem>( value: item, // 绑定整个对象 child: Text( item.fgName, style: GoogleFonts.notoSerif( textStyle: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.blue, ), ), ), ); }).toList(), onChanged: (newValue) { if (newValue != null) { fgTaskController.setSelectedFG(newValue); // 直接获取id和fg_name final selectedId = newValue.id; final selectedFgName = newValue.fgName; // 把这两个值添加到ListView的数据源中 // 示例:_listDataSource.add({"id": selectedId, "fgName": selectedFgName}); } }, ));
- 更新控制器中的选中值定义:
// 在fgTaskController里,把selectedFG的类型改成FGItem? final selectedFG = Rx<FGItem?>(null); void setSelectedFG(FGItem? value) { selectedFG.value = value; }
方法二:通过选中的id反向查找对应数据
如果不想改动现有控制器的选中值类型(还是用id作为value),可以在onChanged回调里用选中的id去列表中匹配对应的FGItem。
修改onChanged部分代码即可:
onChanged: (newValue) { if (newValue != null) { fgTaskController.setSelectedFG(newValue); _selectedFG = newValue; // 通过id查找对应的条目 final selectedItem = fgTaskController.fgList.firstWhere( (item) => item.id == newValue, // 处理找不到的边界情况 orElse: () => FGItem(id: "", fgName: ""), ); final selectedFgName = selectedItem.fgName; // 将id和fgName保存到ListView数据源 // 示例:_listDataSource.add({"id": newValue, "fgName": selectedFgName}); } },
两种方法对比:
- 方法一:代码更简洁,无需额外查找操作,适合可以调整控制器选中值类型的场景。
- 方法二:不需要改动现有选中值的逻辑,适合小范围修改的场景。
内容的提问来源于stack exchange,提问作者user19976096
相关产品推荐
相关产品推荐

