NM *_*ldo 7 constructor dart flutter
这应该是一个简单的答案,但我尚未在互联网上找到解决方案。
假设我在构造函数中有 1 个VoidCallback字段名称onStart,并且当没有参数将其传递给构造函数时,我希望该字段具有默认值。我已经尝试了一些代码,但 IDE 给了我一个警告。如何提供这个默认值?
class DefaultCallbackExample {
final VoidCallback onStart;
final VoidCallback onFinish;
final bool isEnable;
DefaultCallbackExample({
this.onStart = (() => {}), // IDE Warning
required this.onFinish,
this.isEnable = true,
});
}
Run Code Online (Sandbox Code Playgroud)
class DefaultCallbackExample {
final VoidCallback onStart;
final VoidCallback onFinish;
final bool isEnable;
DefaultCallbackExample({
this.onStart = const (() => {}), // IDE Warning
required this.onFinish,
this.isEnable = true,
});
}
Run Code Online (Sandbox Code Playgroud)
jamesdin有一个解决方案,但我希望有一个更简单的解决方案,不必编写constant sentinel value。也许在未来的dart版本中,有一个可能的解决方案
jam*_*lin 10
回调应该可以为 null,或者必须使用默认值进行初始化。默认参数必须是常量,因此像往常一样,如果无法直接提供常量,请使用常量哨兵值:
class DefaultCallbackExample {
final VoidCallback onStart;
final VoidCallback onFinish;
final bool isEnable;
DefaultCallbackExample({
VoidCallback? onStart,
required this.onFinish,
this.isEnable = true,
}) : onStart = onStart ?? (() {});
}
Run Code Online (Sandbox Code Playgroud)
另请注意,() => {}创建一个返回空的匿名函数Set。具有空函数体的匿名函数应该只是() {}. 函数体应该使用=>(如果可能)或花括号,但不能同时使用两者。
创建一个静态方法,该方法将作为类中函数的默认值。
class Class{
final Function function;
Class({this.function = _defaultFunction});
static _defaultFunction() {}
}
Run Code Online (Sandbox Code Playgroud)