Flutter 확장 방법: 예제 가이드

May 07 2023
여러 플랫폼에서 작동할 수 있는 앱을 빌드하려는 경우 Flutter는 고려해야 할 훌륭한 프레임워크입니다. 프로그래밍 언어 Dart를 사용하며 "확장 방법"이라는 기능이 있어 매우 유연합니다.

여러 플랫폼에서 작동할 수 있는 앱을 빌드하려는 경우 Flutter는 고려해야 할 훌륭한 프레임워크입니다. 프로그래밍 언어 Dart를 사용하며 "확장 방법"이라는 기능이 있어 매우 유연합니다. 확장 메서드를 사용하면 크게 변경하지 않고도 기존 유형의 코드에 새 기능을 추가할 수 있습니다. 이렇게 하면 시간이 절약되고 코드를 더 쉽게 관리할 수 있습니다.

이 블로그 게시물에서는 확장 메서드가 무엇인지, 어떻게 사용하는지, Flutter 코드를 개선할 수 있는 방법에 대한 몇 가지 예를 살펴보겠습니다.

확장 방법이란 무엇입니까?

확장 메서드는 소스 코드를 변경하거나 하위 클래스를 만들지 않고 기존 형식에 새 메서드를 추가하는 방법입니다. 그것들은 `extension` 키워드와 확장하는 이름과 유형으로 선언됩니다. 예를 들어 숫자가 짝수이면 true를 반환하고 그렇지 않으면 false를 반환하는 `isEven`이라는 메서드를 `int` 유형에 추가한다고 가정합니다. 다음과 같이 확장 메서드를 작성할 수 있습니다.

extension IntExtensions on int {
  bool get isEven => this % 2 == 0;
}

int x = 42;
print(x.isEven); // true

extension StringExtensions on String {
  String repeat(int n) {
  String result = '';
    for (int i = 0; i < n; i++) {
      result += this;
    }
    return result;
  }
}

String s = 'Hello';
print(s.repeat(3)); // HelloHelloHello

확장 메서드는 Flutter에서 기존 위젯, 모델 또는 기타 유형에 새 기능을 추가하는 데 유용할 수 있습니다. 예를 들어 앱에서 사용자를 나타내는 `User`라는 모델 클래스가 있다고 가정합니다.

class User {
  final String name;
  final int age;
  final String email;
  User(this.name, this.age, this.email);
}

extension UserExtensions on User {
  Widget toCard() {
      return Card(
        child: ListTile(
        leading: Icon(Icons.person),
        title: Text(name),
        subtitle: Text('$age years old'),
        trailing: Text(email),
    ),);
  }
}

User user = User('UserName', 27, '[email protected]');
Widget card = user.toCard();

Flutter에서 확장 메서드를 사용하는 또 다른 예는 기존 위젯에 새 속성 또는 메서드를 추가하는 것입니다. 예를 들어 장식의 테두리 반경을 설정하는 `Container` 위젯에 `borderRadius`라는 속성을 추가한다고 가정합니다. 다음과 같이 확장 메서드를 작성할 수 있습니다.

extension ContainerExtensions on Container {
  Container get borderRadius => this.copyWith(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(10),
    ),
  );
}

Container container = Container(
  color: Colors.blue,
  width: 100,
  height: 100,
);
Container roundedContainer = container.borderRadius;

프로덕션에서 사용할 수 있는 Flutter 확장 프로그램의 유용한 예를 확인하세요.

예제 1: 이 확장은 목록의 첫 번째 요소를 반환하거나 목록이 비어 있는 경우 null을 반환합니다.

extension ListExtension<T> on List<T> {
  T firstOrNull() => this.isEmpty ? null : this.first;
}

extension MyStringExtensions on String {
  String capitalize() {
    return "${this[0].toUpperCase()}${this.substring(1)}";
  }
}

extension ImageExtension on Image {
  double get aspectRatio => width / height;
}

extension StringExtension on String {
  dynamic parseJson() => json.decode(this);
}

extension WidgetExtension on Widget {
  void showSnackbar(BuildContext context, String message) {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
      content: Text(message),
    ));
  }
}

extension NavigatorExtension on BuildContext {
  void navigateTo(String routeName, {Object arguments}) {
    Navigator.pushNamed(this, routeName, arguments: arguments);
  }
}

확장 메서드는 Dart의 강력한 기능으로 기존 유형을 수정하거나 하위 클래스를 생성하지 않고도 기존 유형에 새로운 기능을 추가할 수 있습니다. Flutter에서 기존 위젯, 모델 또는 기타 유형에 새 기능을 추가하는 데 유용할 수 있습니다. 확장 메서드는 Flutter 코드를 보다 표현력 있고 모듈식이며 재사용 가능하게 만들어서 개선할 수 있습니다.