【问题标题】:type ‘Null’ can’t be assigned to CustomClass type类型“Null”不能分配给 CustomClass 类型
【发布时间】:2021-08-17 19:42:18
【问题描述】:

我在 Flutter 上工作了很长时间,而这个新的 null 安全性正在破坏我的代码。

我创建了一个数据模型类来将值存储为对象,如下所示:

class MyClass{
  int x;
  String y;
  MyClass({this.x, this.y});
  .. .. ..rest of the code
}

现在在提供程序中,我有一个 MyClass 对象列表来存储数据库中的数据。 在这里,我使用 firstWhere() 通过 id 搜索所需的对象。

MyClass getObj(int id){
   return list.firstWhere((obj) => obj.id == id, orElse: ()=>null);
}

但这一直给出错误:

无法分配类型“Null”,因为它不是 MyClass 的子类型

我尝试了 firstWhereOrNull 和其他解决方案,但无济于事。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您正试图在不可为空的函数中返回 null。尝试通过添加使 MyClass 可以为空?在 MyClass 这样之后

    MyClass? getObj(int id){ return list.firstWhere((obj) => obj.id == id, orElse: ()=>null); }

    【讨论】:

      【解决方案2】:

      您收到的错误消息是因为orElse 函数的返回类型必须是不可为空的(在the docs 中,签名是E 而不是E?)。

      如果期望从getObj 返回null,并且您准备在调用getObj 的代码中的其他地方处理这种情况,则将方法的返回类型更改为MyClass?(而不是MyClass ) 并使用firstWhereOrNull,正如您所提到的:

      MyClass? getObj(int id){
        return list.firstWhereOrNull((obj) => obj.x == id);
      }
      

      【讨论】:

        猜你喜欢
        • 2021-10-08
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 2021-06-12
        • 2018-04-05
        • 2021-09-30
        • 2023-01-25
        相关资源
        最近更新 更多