Flutter中DropdownButton的onChanged参数类型不匹配报错如何解决
报错原因
该报错由Flutter空安全规范触发:
DropdownButton组件的onChanged回调参数默认是可空类型T?,因为用户主动取消下拉选择时,系统会向回调传入null值,你当前定义的非空String类型参数和系统要求的String?类型不匹配。- 你之前尝试新增
onChanged变量的操作方向错误,不需要额外定义全局回调变量,只需修改现有回调的参数声明和内部逻辑即可修复。
修复方案
提供两种可选修复方式:
方式1:适配可空参数(推荐)
修改onChanged的参数类型为可空String?,同时增加空值拦截逻辑:
Widget _buildDropDownButton(String currencyCategory) { return DropdownButton( value: currencyCategory, items: currencies .map((String value) => DropdownMenuItem( value: value, child: Row( children: <Widget>[ Text(value), ], ), )) .toList(), onChanged: (String? value) { // 空值直接返回,不执行后续逻辑 if (value == null) return; if(currencyCategory == fromCurrency){ _onFromChanged(value); }else { _onToChanged(value); } }, ); }
方式2:非空断言(仅确认无null回调时使用)
如果你确认当前DropdownButton不会触发返回null的场景,可以用!强制声明参数非空:
onChanged: (String? value) { if(currencyCategory == fromCurrency){ _onFromChanged(value!); }else { _onToChanged(value!); } },
提示:非空断言如果遇到null输入会直接触发运行时崩溃,无特殊需求优先选择第一种修复方式。
内容的提问来源于stack exchange,提问作者AthensRR18
相关产品推荐
相关产品推荐

