Flutter中DropdownSearch选中数据无法存入数据库的解决方法
解决DropdownSearch选中数据存入数据库的问题
你的核心问题是错误地把搜索框控制器当成了选中项的绑定载体,并且onChanged回调里没有正确保存选中的数据。以下是具体修正步骤:
1. 修正onChanged回调,保存选中的模型
DropdownSearch的onChanged是获取选中项的正确入口,你之前只是引用了con.nomEquipo但没有赋值。修改这部分代码,把选中的UserModel保存到你的控制器变量中:
DropdownSearch<UserModel>( onChanged: (UserModel? value) { // 方案1:如果nomEquipo是TextEditingController,存选中项的文本 con.nomEquipo.text = value?.etiqueta ?? ''; // 方案2:如果控制器里有专门存选中模型的变量(更推荐,方便后续取完整数据) con.selectedEquipo = value; }, // 其他原有代码不变... )
2. 明确TextFieldProps里的controller作用
你在popupProps.searchFieldProps里设置的controller: con.nomEquipo,只是控制弹窗内搜索框的输入内容,和选中项的存储完全无关,这是你之前误解的点。如果不需要自定义搜索框的逻辑,甚至可以把这部分controller设置去掉。
3. 提交到数据库的逻辑
当你需要把数据存入数据库时,直接从控制器的变量中取数据即可:
// 示例:假设你有一个提交按钮的点击事件 ElevatedButton( onPressed: () async { if (con.selectedEquipo != null) { // 获取选中项的字段 String equipoEtiqueta = con.selectedEquipo!.etiqueta; String equipoName = con.selectedEquipo!.name; // 调用数据库插入方法,示例伪代码 await yourDatabase.insert('equipos', { 'etiqueta': equipoEtiqueta, 'name': equipoName }); } }, child: Text('提交到数据库'), )
补充:控制器类的变量定义(示例)
如果用方案2(存储完整模型),你的控制器类需要添加对应的变量:
class YourController extends GetxController { // 如果你需要TextEditingController用于其他输入框,保留它 TextEditingController nomEquipo = TextEditingController(); // 添加存储选中模型的变量 UserModel? selectedEquipo; }
这样修改后,就能正确获取选中项并将其数据存入数据库了。
内容的提问来源于stack exchange,提问作者Daniel Camaja
相关产品推荐
相关产品推荐

