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

Flutter DropdownButtonFormField触发AssertionError问题求助

解决DropdownButtonFormField的断言错误问题

这个断言错误的核心原因是:DropdownButtonFormField要求当前绑定的value必须在提供的items列表中存在且唯一匹配。你的代码存在两个关键问题:

  1. 所有DropdownMenuItem都未设置value属性,导致组件无法识别选项的对应值
  2. 未给DropdownButtonFormField指定初始value(如果设置初始值,必须与某个DropdownMenuItem的value完全匹配)

修复步骤:

  • 给每个DropdownMenuItem添加value属性,确保每个选项的值唯一
  • (可选)给DropdownButtonFormField设置初始value,值需对应某个选项的value

修改后的完整代码:

child: Row(
  children: [
    Flexible(
      flex: 1,
      child: DropdownButtonFormField<String>(
          // 指定泛型类型,避免类型推断问题
          value: 'men', // 可选:设置初始选中值,需与items中的value对应
          onChanged: (value) {},
          items: const [
            DropdownMenuItem(
              value: 'men', // 添加value属性
              child: Text('men'),
            ),
            DropdownMenuItem(
              value: 'women', // 添加value属性
              child: Text('women'),
            )
          ],
          decoration: const InputDecoration(
              labelText: 'gender',
              labelStyle: TextStyle(color: Color(0XFF121826)),
              enabledBorder: OutlineInputBorder(
                  borderSide:
                      BorderSide(color: Color(0XFF9B9B9B)),
                  borderRadius:
                      BorderRadius.all(Radius.circular(8))),
              focusedBorder: OutlineInputBorder(
                  borderSide:
                      BorderSide(color: Color(0XFF121826)),
                  borderRadius:
                      BorderRadius.all(Radius.circular(8))))),
    ),
    const SizedBox(width: 16),
    Flexible(
      flex: 1,
      child: TextFormField(
          controller: TextEditingController(),
          decoration: const InputDecoration(
              labelText: 'birth date',
              labelStyle: TextStyle(color: Color(0XFF121826)),
              enabledBorder: OutlineInputBorder(
                  borderSide:
                      BorderSide(color: Color(0XFF9B9B9B)),
                  borderRadius:
                      BorderRadius.all(Radius.circular(8))),
              focusedBorder: OutlineInputBorder(
                  borderSide:
                      BorderSide(color: Color(0XFF121826)),
                  borderRadius:
                      BorderRadius.all(Radius.circular(8)))),
          keyboardType: TextInputType.text),
    )
  ],
),

额外说明:

如果不想设置初始值,可以把value设为null,但需要确保DropdownButtonFormField的泛型支持 nullable 类型(比如DropdownButtonFormField<String?>),同时组件会显示默认的占位提示(可以通过hint属性自定义)。

内容的提问来源于stack exchange,提问作者MohammadBaqer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:42:43