有没有更好的方法在Dart构造函数中测试null

时间:2018-06-16 17:17:24

标签: dart flutter

我使用以下构造函数构建对象:

 if(data['A'] != null) {
    aObj = A.fromMap(data['A']);
 }

问题在于,如果我传入的地图没有aObj的映射,它就会崩溃。我已经尝试将赋值移到大括号中并测试null:

var query = from admin in db.Admins
where admin.Email == adminLoggedIn.Email
select new { Email=admin.Email, Name=admin.Name, RoleId = admin.RoleId };

这很有效。但是我想像其他数据成员一样测试快捷方式构造函数的一部分。

这可能吗?

3 个答案:

答案 0 :(得分:2)

三元运算符怎么样?

aObj = data['A'] ? A.fromMap(data['A']) : null;

答案 1 :(得分:2)

我认为如何以一种简洁的方式防止崩溃是这样的:

aObj = A.fromMap(data['A'] ?? Map())

MapA.fromMap时,这会向自定义data['A']构造函数返回 null,之后会colrow null data['A'] null,因为Map中的字段不存在。< / p>

答案 2 :(得分:0)

随着Dart 2.8中引入的NNBD,您可以使用:

class Foo {
  final int value;

  // 0 is the default value in case the expression data['key'] returns null
  Foo.fromNonNullable(Map data) : value = data['key'] ?? 0;

  // 0 is the default value in case `data` is `null`
  Foo.fromNullable(Map? data) : value = data?['key'] ?? 0;
}