簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM