
Flutter는 pub.dev에서 개발에 도움이 되는 다양한 패키지와 플러그인를 제공하고있습니다.
Firebase같은 거대한 패키지부터 작지만 도움이되는 다양한 패키지들이 있으며, 누구라도 패키지를 만들고 등록할 수 있습니다.
저 역시 그동안 많은 패키지를 사용하면서 플러터 생태계에 기여하고 싶은 마음이 있었습니다.
이 포스트에서는 패키지를 배포하는 과정과 내용을 공유하려합니다.

내가 만든 패키지가 pub.dev에 배포된다니 너무 뿌듯하다!
dart create <package_name> -t package
flutter create <package_name> -t [pacakge or plugin]

flutter의 위젯이나 기능이 필요없다면 dart 프로젝트로 만들어도 무관합니다.
패키지의 종류에는 package와 plugin이 있습니다.
소스를 작성하는 정해진 방법은 없지만, Flutter에서는 다음의 구조를 기반으로 작성을 권장합니다.
project
- lib
- src
- <file>.dart
- <package_name>.dart
- pubspec.yaml
일반적인 Flutter 프로젝트랑 크게 차이가 없습니다만
src로 감싸는 이유가 뭘까요?
src 디렉토리 아래의 소스들은 기본적으로 비공개로 설정되기 때문입니다.
아래 예로 설명드리겠습니다.
lib
- <source1>.dart
- <package_name>.dart
위와 같은 구조에서는 사용하는 쪽에서 <source1>.dart에 접근이 가능합니다.
즉, import "package:<package_name>/<source1>.dart"; 이런 식의 접근을 허용한다는 것입니다.
lib
- src
- <source1>.dart
- <package_name>.dart
하지만, src로 감싸주게 되면
import "package:<package_name>/src/<source1>.dart";으로의 접근이 불가능해집니다.
저는 세부 파일을 노출하고 싶지 않아 src 디렉토리를 만들었습니다.

그러면 어떻게 소스에 접근해야하나요?
export를 사용해 파일 접근은 막되 소스를 노출하면 됩니다.

코드를 아무리 잘짜고, 잘 만들어진 기능이라 해도 설명이 부족하면 사용하기가 매우 어렵습니다.
때문에 문서에도 많은 신경을 써야합니다.
Flutter에서는 아래 문서들을 권장하고 있습니다.
README.mdCHANGELOG.mdLICENSE문서 작성을 마쳤다면 이제 배포를 할 차례입니다.
바로 패키지를 배포해도 되지만 빠뜨린 것은 없는지, 에러는 없는지 테스트를 해보는 것을 추천합니다.
프로젝트에서 아래 커맨드를 터미널에 입력합니다.
flutter pub publish --dry-run

별 이상이 없다면 위와 같이 'Package has 0 warnings.' 와 함께 종료됩니다.
에러가 있다면 해결 하고 아래 명령어를 입력하여 배포를 진행합니다.
flutter pub publish

Do you want to publish <package_name> <version> to http://pub.dev (y/N)?
배포할꺼냐고 묻는 질문이 나오면 'y'를 입력합니다.
배포가 완료되면 성공적으로 배포했다는 메세지와 함께 배포가 끝납니다.
정상적으로 배포되었는지 확인하려면 https://pub.dev/packages/package-name 로 들어가 확인해보면 됩니다.
무섭고 어려울 줄만 알았던 패키지 배포가 생각보다 쉬웠던 거라 생각이 들었으면 좋겠습니다.
'이 기능은 패키지로 배포하기에 너무 사소한데'라는 생각은 하지 않으셔도 됩니다.
누군가는 그 기능이 필요할 것이고 pub.dev에도 생각보다 코드 몇줄의 패키지도 많습니다.
저 역시 누가 쓰겠어라는 마음으로 배포한 패키지를 누군가가 사용해주었습니다!
그러니 우리 모두 Flutter의 패키지 커뮤니티에 기여해봅시다!