AuthState copy({
FirebaseUser firebaseUser,
String token,
List<Map> contracts,
bool loadingContracts,
String contractsError,
List<Map> searchModules,
bool loadingSearchModules,
String searchModulesError
}) {
AuthState state = new AuthState(
firebaseUser ??= this.firebaseUser,
token ??= this.token,
contracts ??= this.contracts,
loadingContracts ??= this.loadingContracts,
contractsError ??= this.contractsError,
searchModules ??= this.searchModules,
loadingSearchModules ??= this.loadingSearchModules,
searchModulesError ??= this.searchModulesError
);
我正在使用Redux,因此每次调度动作时都需要创建一个新状态。
当我使用??
而不提供参数时,该值将设置为null,因此这不是我想要的。
如果我使用??=
,它会将对象的属性分配给新值。
但是当我将参数显式设置为null
时,它无法将值设置为null。
我现在正在解决这个问题几天。如果有人可以帮助我会很棒。
顺便说一句,我正在使用https://github.com/alexeieleusis/greencat构建一个Flutter应用程序作为Redux库。
答案 0 :(得分:1)
Dart没有提供一种方法来区分null
是否明确地传递给可选参数,或者根本没有传递任何参数。
您可以使用类似
的内容AuthState.copy({A a = someDummyValue /* other parameters}) {
AuthState state = new AuthState(
a == someDummyValue ? this.a : a,
/* similar for other parameters */
)
必须在某处定义someDummyValue,如
static const someDummyValue = const A.dummy();
仅当A
中的所有字段均为final
时才有效,否则您必须找到另一种方法来制作唯一someDummyValue
。
我建议使用built_value包为构建器和序列化器生成不可变类的代码。