[英]Default values of an optional parameter must be constant flutter / dart
[英]Dart: Assigning default values to optional parameters errors
我的 class 中有一堆變量,但並非每個設置都需要其中的每一個。 我希望它們可以通過構造函數分配,但只是可選的。
我遇到了根據我在同一個 class 中定義的常量分配默認值的問題。這是所有相關代碼:
class ExerciseSettings {
// Units available
static const List<String> repUnits = ["x"];
static const List<String> timeUnits = ["s", "min", "h"];
static const List<String> weightUnits = ["kg", "lbs"];
static const List<String> intensityUnits = ["/10"];
// Attributes needed to be assigned
bool useReps = true;
bool useWeight = true;
String repUnit = repUnits[0];
String timeUnit = timeUnits[0];
String weightUnit = weightUnits[0];
String intensityUnit = intensityUnits[0];
ExerciseSettings({
this.useReps, // This errors with the "null value" error as described below
this.useWeight,
this.repUnit = repUnits[0], // These two error with "value must be a constant"
this.timeUnit = ExerciseSettings.repUnits[0],
this.weightUnit = const repUnits[0], // And these two error with "... is not a class"
this.intensityUnit = const ExerciseSettings.repUnits[0]
});
此錯誤與“參數'useReps'由於其類型不能具有'null'值,但隱式默認值為'null'。嘗試添加顯式非'null'默認值或'required' '”。
我不明白這是為什么。 首先,為什么不考慮初始化變量? 它們已分配值,這意味着它們不應該是 null。
其次,為什么我不能在構造函數中將 static 常量指定為默認值?
你不能將列表項傳遞給常量值,所以試試這個:
class ExerciseSettings {
// Units available
static const List<String> repUnits = ["x"];
static const List<String> timeUnits = ["s", "min", "h"];
static const List<String> weightUnits = ["kg", "lbs"];
static const List<String> intensityUnits = ["/10"];
// Attributes needed to be assigned
final bool? useReps;
final bool? useWeight;
final String? repUnit;
final String? timeUnit;
final String? weightUnit;
final String? intensityUnit;
ExerciseSettings({
this.useReps = true,
this.useWeight = true,
String? repUnit,
String? timeUnit,
String? weightUnit,
String? intensityUnit,
}) : repUnit = repUnit ?? repUnits[0],
timeUnit = timeUnit ?? ExerciseSettings.repUnits[0],
weightUnit = weightUnit ?? repUnits[0],
intensityUnit = intensityUnit ?? ExerciseSettings.repUnits[0];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.