Dart:使用非常量值作为默认构造函数参数

Ole*_*Ole 3 dart dart-null-safety

我想使用 FirebaseAuth.instance (非常量值)作为构造函数中的默认参数。

我有这门课:

class MailAuth {
  final FirebaseAuth firebaseAuth = FirebaseAuth.instance;

  MailAuth();

  // methods using firebaseAuth
}
Run Code Online (Sandbox Code Playgroud)

现在我想对这个类进行单元测试,所以我想模拟firebaseAuth并将模拟注入到构造函数中。它应该是一个命名参数,默认值为FirebaseAuth.instance。我尝试过这样的事情:

class MailAuth {
  final FirebaseAuth firebaseAuth;

  MailAuth({this.firebaseAuth = FirebaseAuth.instance});

  // methods using firebaseAuth 
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它FirebaseAuth.instance不是一个常数。

我怎样才能实现这种行为?

lrn*_*lrn 7

使用null值作为符号来使用默认值:

 MailAuth({FirebaseAuth? firebaseAuth}) 
    : firebaseAuth = firebaseAuth ?? FirebaseAuth.instance;
Run Code Online (Sandbox Code Playgroud)

如果参数非空,则使用参数初始化变量,否则使用“默认”单例实例。

(针对空安全性进行了更新。这仍然有效,并且实例变量不是不可为空的。只有构造函数参数可以为空。)