일반적으로 경로에서 이미지나 폰트를 불러오는 경우에는 아래와 같이 문자열로 경로나 폰트 명을 지정한다.
Widget image() {
return Image.asset('assets/images/profile.jpeg');
}
Widget text() {
return Text("hello", style: TextStyle(fontFamily: "Pretendard"));
}
하지만 이러한 경우에는 오타 등과 같은 휴먼 에러의 위험성이 있고, 유지보수 측면에서도 그다지 좋은 점이 없다.
flutter_gen
flutter_gen 패키지는 pubspec.yaml에 지정한 asset들을 코드 제너레이터를 통해 dart 파일로 추출해주는 패키지이다. 이를 통해 위에서 말했던 일반적인 경우에서의 단점들을 해결할 수 있다. 사용법도 매우 간단하다.
Intallation
pubspec.yaml에 종속성을 추가하고 flutter pub get을 실행한다.
dependencies:
flutter_gen:
dev_dependencies:
build_runner:
flutter_gen_runner:
Configuration File
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
flutter:
uses-material-design: true
assets:
- assets/images/
fonts:
- family: Raleway
fonts:
- asset: assets/fonts/Raleway-Regular.ttf
FlutterGen은 pubspec.yaml의 flutter와 flutter_gen key를 기반으로 하여 dart 파일을 생성한다.
어떤 경로에 추출할지, flutter_svg나 lottie와 같은 패키지를 사용할 지의 여부 등은 속성으로 추가할 수 있다.
Generate dart file
아래 커맨드를 실행하면 pubspec.yaml에 설정한 경로로 dart file이 생성된다. 만약에 경로를 지정하지 않았다면 lib/gen/에 file이 생성된 것을 확인할 수 있을 것이다.
dart run build_runner build
Usage
생성된 파일로부터 asset을 사용할 수 있다. 사용법은 아주 간단하다.
Image
예를 들어 assets/images/chip.jpg 파일을 flutter_gen을 통해서 dart file로 추출했다고 한다면 다음과 같이 사용할 수 있다.
Widget build(BuildContext context) {
return Assets.images.chip.image();
}
Widget build(BuildContext context) {
return Assets.images.chip.image(
width: 120,
height: 120,
fit: BoxFit.scaleDown,
);
Widget build(BuildContext context) {
// Assets.images.chip.path = 'assets/images/chip3/chip3.jpg'
return Image.asset(Assets.images.chip.path);
}
flutter_gen을 사용하면 파일의 경로뿐만 아니라, AssetImage, Image, ImageProvider로 반환을 해주기 때문에 바로 위젯으로 사용할수 있다.
나 같은 경우에는 svg 파일도 사용하고 있어 flutter_svg 속성을 true로 설정해주었는데, svg 역시 사용법은 위와 동일하다.
Font
Text(
"hello",
style: TextStyle(fontFamily: FontFamily.pretendard)
)
FontFamily class 안에 해당 폰트를 가져올 수 있는 getter 메서드가 정의되어 있어 단순하게 가져다 쓰면 된다.
'Flutter' 카테고리의 다른 글
Flutter Version Management(FVM) 사용법 정리(Mac) (0) | 2024.05.23 |
---|---|
get_it, injectable 패키지를 이용한 의존성의 주입 (1) | 2024.01.15 |
Flutter MVVM Architecture (0) | 2023.05.30 |
Flutter Mockito를 이용한 API 통신 Unit Test (0) | 2023.04.19 |
Flutter InheritedWidget (0) | 2023.04.18 |