Flutter使用country_currency_pickers时空安全类型不匹配错误如何解决?
报错原因
这个报错确实是Dart空安全规范导致的类型不匹配问题:CurrencyPickerDropdown组件的onValuePicked回调约定返回的是可空类型Country?,你当前声明的回调参数是不可空的Country,二者类型不兼容所以触发编译错误。
另外你贴出的代码存在两处笔误需要先修正:
- 定义的下拉项构造方法名为
_buildDropdownItem,但CurrencyPickerDropdown的itemBuilder参数传的是不存在的_buildCurrencyDropdownItem onValuePicked回调里你定义的参数名为countryvalue,但打印语句里用的是未定义的country变量
修复方案
第一步:调整onValuePicked回调参数类型
把回调参数声明为可空的Country?,逻辑执行前先做空判断,避免空异常:
CurrencyPickerDropdown( itemBuilder: _buildDropdownItem, initialValue: 'INR', onValuePicked: (Country? countryvalue) { if (countryvalue != null) { print("+${countryvalue.phoneCode}(${countryvalue.isoCode})"); } }, )
第二步(可选,若itemBuilder也报类型错误时执行):调整下拉项构造方法的参数类型
如果itemBuilder参数也报同样的类型不匹配错误,把_buildDropdownItem的入参改为可空类型,内部做空判断后再渲染组件:
Widget _buildDropdownItem(Country? country) { if (country == null) return const SizedBox.shrink(); return Container( child: Row( children: <Widget>[ CountryPickerUtils.getDefaultFlagImage(country), const SizedBox( width: 8.0, ), Text("+${country.phoneCode}(${country.isoCode})"), ], ), ); }
修改完成后即可正常编译运行。
内容的提问来源于stack exchange,提问作者anderson48
相关产品推荐
相关产品推荐

