🐦 Flutter

[Dart] 슈퍼 이니셜라이저

ji-hyun 2022. 12. 11. 17:25

Dart 2.17 부터 새로운 단축 구문을 사용하여 생성자 매개변수를 슈퍼클래스에 전달할 수 있습니다.

참고로 이전 구문은 다음과 같습니다.

 

class Person {
  Person(this.name);
  final String name;
}

// Old way: before Dart 2.17
class Employee extends Person {
  Employee(String name, this.salary) : super(name);
  final int salary;
}

 

즉 부모 생성자에 인수를 전달하기 위해 super 를 명시적으로 호출해야 했습니다.

 

 

 

Dart 2.17 부터 다음과 같이 할 수 있습니다.

 

// New way: Dart 2.17 and above
class Employee extends Person {
  Employee(super.name, this.salary);
  final int salary;
}

 

 

 

 

이것은 명명된 인수에서도 작동합니다.

 

class Person {
  Person({required this.name});
  final String name;
}

// New way: Dart 2.17 and above
class Employee extends Person {
  Employee({required super.name, required this.salary});
  final int salary;
}

 

 

 

 

 

위젯 생성자에서의 사용법

슈퍼 이니셜라이저는 많은 위젯 클래스에서 생성자의 크기를 줄이는데 도움이 됩니다.

예를 들어 CircularProgressIndicator 위젯은 다음에서 업그레이드 할 수 있습니다.

 

class CircularProgressIndicator extends ProgressIndicator {
  const CircularProgressIndicator({
    Key? key,
    double? value,
    Color? backgroundColor,
    Color? color,
    Animation<Color?>? valueColor,
    String? semanticsLabel,
    String? semanticsValue,
  }) : super(
    key: key,
    value: value,
    backgroundColor: backgroundColor,
    color: color,
    valueColor: valueColor,
    semanticsLabel: semanticsLabel,
    semanticsValue: semanticsValue,
  );
}

 

 

 

class CircularProgressIndicator extends ProgressIndicator {
  const CircularProgressIndicator({
    super.key,
    super.value,
    super.backgroundColor,
    super.color,
    super.valueColor,
    super.semanticsLabel,
    super.semanticsValue,
  });
}

 

 

 

 

 

실제로 가장 일반적인 사용 사례는 위젯 키를 더 쉽게 지정하는 것입니다.

 

class OrderStatusLabel extends StatelessWidget {
  // before (Dart 2.16 and below)
  const OrderStatusLabel({Key? key, required this.order}) : super(key: key);
  // after (Dart 2.17 and above)
  const OrderStatusLabel({super.key, required this.order});

  final Order order;
  ...
}

 

 

 

 

 

https://codewithandrea.com/tips/dart-2.17-super-initializers/

 

How to Use Super Initializers in Dart 2.17

Since Dart 2.17, you can initialize parameters of the super class with a new shorthand syntax. Here's how.

codewithandrea.com

 

 

 

https://jja08111.github.io/dart/dart-2-17/

 

Dart 2.17 주요 변화 3가지 살펴보기

이번 2022 구글 I/O에서 플러터가 3.0으로 버전업되면서 다트도 2.17로 버전업되었다. 다트의 주요 변화 3가지를 살펴보자.

jja08111.github.io