簡體   English   中英

Dart 構造函數中的必需參數可以命名嗎?

[英]Can required parameters in a Dart constructor be named?

我正在為我正在學習的 Flutter/Dart 類使用一些 Dart 代碼。 我希望以下代碼能夠編譯,但它沒有:

class Person {
  String? name;
  int? age;

  Person(this.name, this.age);

  @override
  String toString() {
    return "name: $name\nage: $age";
  }
}

void main() {
  final person = Person(name: 'Joe', age: 30);
  print(person);
}

當我將構造函數參數設為可選時,如下所示,它會編譯:

class Person {
  String? name;
  int? age;

  Person({this.name, this.age});

  @override
  String toString() {
    return "name: $name\nage: $age";
  }
}

void main() {
  final person = Person(name: 'Joe', age: 30);
  print(person);
}

我嘗試搜索 Flutter 開發文檔的原因,或者在構造函數中使用所需參數及其名稱的方法,但我沒有找到任何東西。 我當然可以想象我希望所需的構造函數參數具有名稱的情況。

我的 pubspec.yaml 指定以下內容: environment: sdk: ">=2.12.0 <3.0.0"

您的第一個示例在 dart 中使用了所謂的“位置參數”。 您不能使用名稱標簽調用位置參數,這就是第一個示例無法編譯的原因。

第二個示例使用“命名參數”。 {}中定義的任何參數都被視為命名參數,並且必須使用名稱標簽進行調用。 正如 dart 語言教程中所解釋的,命名參數是可選的,除非它們被明確標記為required

因此,只需在您需要的任何命名參數之前添加required關鍵字。

class Person {
  String? name;
  int? age;

  Person({required this.name, required this.age});

  @override
  String toString() {
    return "name: $name\nage: $age";
  }
}

void main() {
  final person = Person(name: 'Joe', age: 30);
  print(person);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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