You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:10:29