Mobile/Flutter

[Flutter] flutter_gen을 이용한 Asset 관리

펭귄알 2024. 8. 13. 11:19

저는 개발할 때 폰트, 색상, 이미지등을 관리할 때 어려움을 느낀적이 있었습니다.

아래 처럼 선언할 경우 관리 및 추적이 어려움.

Widget build(BuildContext context) {
  return Image.asset('assets/images/profile.jpeg');
}

 

flutter_gen을 사용하니 아래 처럼 사용가능함.

Widget build(BuildContext context) {
  return Assets.images.profile.image();
}

 

flutter_gen

flutter_gen은 플러터 프로젝트에서 Asset 관리 및 코드 자동 생성을 도와주는 도구입니다.

이 도구를 사용하면 Flutter에서 이미지, 폰트, 색상 등의 리소스를 더 간편하게 관리할 수 있습니다. flutter_gen을 사용하여 Asset을 관리하는 방법에 대해 단계별로 설명드리겠습니다.

 

1. pubspec.yaml에 추가 

dev_dependencies:
  build_runner:
  flutter_gen_runner:

 

2. Configuration 

flutter_gen:
  output: lib/gen/
  line_length: 120
  colors:
    inputs:
      - assets/colors/colors.xml

3. build_runner 실행

dart run build_runner build

 

저는 디자인에 관련된 패키지는 별도의 패키지로 분리하여 구성하였고, 아래처럼 디렉토리 구조를 만들게 되었습니다.

적용

저는 Font, Color를 정의해보겠습니다.

 

사용하기 전:

1. Color는 xml 파일을 통해 정의할 수 있음

2. font는 pubspec.yaml에 정의한 경로에 삽입

 

Configuration에서 asset 및 font의 경로를 지정하여 generate합니다.

flutter:
  assets:
    - assets/colors/
  fonts:
    - family: Pretendard
      fonts:
        - asset: assets/fonts/Pretendard-thin.ttf
          weight: 100
        - asset: assets/fonts/Pretendard-ExtraLight.ttf
          weight: 200
        - asset: assets/fonts/Pretendard-Light.ttf
          weight: 300
        - asset: assets/fonts/Pretendard-Regular.ttf
          weight: 400
        - asset: assets/fonts/Pretendard-Medium.ttf
          weight: 500
        - asset: assets/fonts/Pretendard-SemiBold.ttf
          weight: 600
        - asset: assets/fonts/Pretendard-Bold.ttf
          weight: 700
        - asset: assets/fonts/Pretendard-ExtraBold.ttf
          weight: 800
        - asset: assets/fonts/Pretendard-Black.ttf
          weight: 900

4. 결과

 

또한 svg파일을 사용할 경우 flutter_svg 속성을 변경해주면 svg파일에 대한 내용도 생성을 해줍니다. (Optinal 참조)

flutter_gen:
  output: lib/gen/ # Optional (default: lib/gen/)
  line_length: 80 # Optional (default: 80)

  # Optional
  integrations:
    flutter_svg: true
    flare_flutter: true
    rive: true
    lottie: true

 

프로젝트 초기에 이런 것들을 구조화 해놓지 않으면 차후에 유지보수 할 때 굉장히 번거로운 작업이 될 수 있으니 이렇게 관리하는것도 좋은 방법이라고 생각합니다. 오늘도 빡코딩!