Flutter DropdownButtonFormField触发AssertionError问题求助
这个断言错误的核心原因是:DropdownButtonFormField要求当前绑定的value必须在提供的items列表中存在且唯一匹配。你的代码存在两个关键问题:
- 所有
DropdownMenuItem都未设置value属性,导致组件无法识别选项的对应值 - 未给
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
相关产品推荐
相关产品推荐

