dart _TypeError检查null时出现异常?

jgwigjjp  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(64)

(我是dart的新手,但我有25年以上的开发经验,如C#,JS.)
为什么会发生这种异常?我在这一行没有任何意义...检查null永远不应该抛出类型异常。这背后的原因是什么?

if (widget.columnDef.setEditValueFunc != null) {

字符串


的数据
setEditValueFunc的声明是:

class CdItemsViewColumnDef<T> {
  late void Function(T, String)? setEditValueFunc;
  ...


setEditValue是这样设置的:

final List<CdItemsViewColumnDef<MyDataItem>> columnDefs = [];
columnDefs.add(CdItemsViewColumnDef<MyDataItem>(

  setEditValue: (item, value) => item.name = value,
  ...


我需要以某种方式转换null吗?
将声明更改为

class CdItemsViewColumnDef<T> {
  late void Function(dynamic, String)? setEditValueFunc;
  ...


是在解决问题。但实际上我想在这里用T。

cqoc49vn

cqoc49vn1#

在这个例子中,我假设你的集合是List,但它可以是任何集合。

final columnDefs = <CdItemsViewColumnDef>[];
  columnDefs.add(CdItemsViewColumnDef<MyDataItem>(
    setEditValue: (item, value) => item.name = value,
  ));

字符串
当您将集合定义为CdItemsViewColumnDef<dynamic>时会导致问题,稍后尝试强制执行不同的对象类型:CdItemsViewColumnDef<MyDataItem>
根据您的使用情况:

方案一

final columnDefs = <CdItemsViewColumnDef>[];
  columnDefs.add(CdItemsViewColumnDef(
    setEditValue: (item, value) => item.name = value,
  ));


这将被解释为CdItemsViewColumnDef<dynamic>的集合

方案二

final columnDefs = <CdItemsViewColumnDef<MyDataType>>[];
  columnDefs.add(CdItemsViewColumnDef<MyDataType>(
    setEditValue: (item, value) => item.name = value,
  ));


这将被解释为CdItemsViewColumnDef<MyDataType>的集合
显然,如果可以的话,你应该总是使用强类型(解决方案2),但是如果你想拥有集合项的动态类型,整个集合必须是List<dynamic>

相关问题