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/
https://jja08111.github.io/dart/dart-2-17/
'🐦 Flutter' 카테고리의 다른 글
[Dart] firstWhere (0) | 2022.12.11 |
---|---|
[Dart] Factory Constructor (0) | 2022.12.11 |
[Flutter] 푸시 알람 눌렀을 때 다른 페이지로 이동 (4) | 2022.11.17 |
[Flutter] Statusbar color 화면마다 다르게 적용 (0) | 2022.09.26 |
[Flutter] part 와 import 차이를 알아보자 (0) | 2022.08.20 |