본문 바로가기
Tech/flutter

[flutter] 플러터 공부좀 해봤다면 flutter favorites는 써봐야지

by 패드로 2020. 10. 28.

Flutter 공부를 하다보면 본인이 만든 패키지를 쓰기도 하지만 다른 기관 / 팀 / 사람들이 만들어둔 패키지를 사용하기도 합니다.

애초에 플러터가 레고 형식으로 간단히 조립해서 사용하기 좋은 구성을 갖고있는만큼, 있는 부품으로 빠르게 완성작을 만들어낼 수 있다는 장점을 버리고 혼자 다 개발하는것은... 굳이 그럴 필요가 있을까요?

하지만 개발자라고 하신다면 내가 만들지 않은 패키지/라이브러리를 적용시키는데 많은 고민을 하게 되고, 고민을 하는게 맞습니다 ㅎㅎ

빈약한 기능/완성도의 패키지를 별 고민없이 적용했다가 나중에 치명적인 오류가 발생하거나 업데이트를 해주지 않아 deprecated되기라도 한다면 부랴부랴 대체품을 찾아 적용해야하기 때문이죠. 

또 빈약한 패키지는 문서 작성도 제대로 되어있지 않아 버전 관리나 메소드 사용에도 자잘한 어려움을 마주하게됩니다.

 

flutter에서 사용 가능한 pub.dev 사이트에 가보면 아주 많은 패키지가 있고, 일반인도 패키지를 만들어 올릴 수 있기 때문에 여러 요소들을 고려해서 패키지를 골라야 합니다.

 

패키지를 보면 하단과 같이 우측에 LIKES | PUB POINTS | POPULARITY 이렇게 3가지 요소가 있습니다.

간단히 설명하면

 

LIKES = 얼마나 많은 개발자가 패키지를 좋아했는지에 대한 값. 

PUB POINTS = 품질 척도로 코드 스타일, 플랫폼 지원 여부, 유지 관리를 얼마나 잘하는지, 문서를 얼마나 잘 정리해서 사람들이 쓰기 쉽게 해주는지 등을 점수화해둔 척도입니다. 기준을 잘 지키면 100점은 대부분 넘는것 같습니다.

POPULARITY = 지난 60일동안 이 패키지에 의존하는 앱 수를 측정합니다. 0~100%로 하위 몇퍼센트인지를 나타내는 것이고(100%에 가까울수록 좋은 것) 향후 이를 절대 사용 횟수로 적용하려고 노력 중이라고 합니다. 

flutter favorites? 

수많은 패키지 중 엄격한 품질 표준을 통과한 패키지들을 골라 flutter favorites라고 지정해둔 것이 있습니다.

나름 위원회(flutter ecosystem sommitte)를 꾸려 어떤 것을 선정할 지 의견을 나누고 선정하는 것 같습니다.

자세한 선정 기준이나 위원회 구성은 링크를 참조해주세요!

flutter.dev/docs/development/packages-and-plugins/favorites

 

Flutter Favorite program

Guidelines for identifying a plugin or package as a Flutter Favorite.

flutter.dev

이 flutter favorites는 아래 링크에서 확인 가능합니다.

pub.dev/flutter/favorites

 

Page 1 | Flutter Favorite packages

Pub is the package manager for the Dart programming language, containing reusable libraries & packages for Flutter, AngularDart, and general Dart programs.

pub.dev

오늘 날짜(2020/10/28) 기준으로 총 31개의 패키지가 있고, 수가 얼마 되지 않았기에 플러터를 공부하고있는 입장으로써 다 써보면 되겠네? 라는 생각을 잠시 했지만 하나하나 뜯어보다 보니 생각보다 앱 아키텍쳐를 구성하기 위한 패키지가 많아서 이는 제외해야 될 것 같습니다. 추가적으로 ios/android 중 하나만을 타겟팅한 패키지도 제외하였습니다.

 

하여 제외한 나머지 패키지들은 현재 스터디하면서 만들고 있는 프로젝트에 어거지라도 넣어보자는 목적을 갖고 추려보기로 하였습니다.

참고로 현재 스터디하면서 만드는 프로젝트는 공공데이터 api를 통해서 전국 고속도로 cctv 데이터를 받아와 지도에 표시하고 영상을 확인 가능한 프로젝트입니다.

 

[적용 목록(목표)]

 

provider

url_launcher

location

flutter_slidable

convex_bottom_bar

shared_preferences

sqflite

google_fonts

json_serializable

sign_in_with_apple

connectivity

device_info

geolocator

share

sensors

battery

path_provider

package_info

 

[제외]

 

- 아키텍쳐 상

rxdart : Stream 확장 메소드를 제공하는데 Stream 안쓰는 프로젝트 진행중

 

- 개발 아키텍쳐용

mobx

mobx-codegen

flutter-mobx

redux

flutter-redux

flutter_bloc

bloc

 

- 빌드용

built_collection

build_value_generator

built_value

 

- 안드로이드 전용

android_intent

android_alarm_manager

 


이제 추린 목록 기반으로 사용할 라이브러리를 사용처에 맞게 목표를 세우고 적용해봅니다.

하나하나 링크 걸기가 너무 귀찮은 관계로... https://pub.dev

하단 링크에서 패키지명으로 검색하거나 메인에서 flutter favorites을 클릭해서 들어가면 바로 확인 가능합니다.

 

Dart packages

Pub is the package manager for the Dart programming language, containing reusable libraries & packages for Flutter, AngularDart, and general Dart programs.

pub.dev

 

provider

기능 : 여러 위젯에서 공통적으로 사용할 데이터를 관리

프로젝트 적용 : Notify 기능을 통해 mvvm 패턴 구현

 

url_launcher

2020/10/29 - [Tech/flutter] - [flutter] favorites 공략 - url_launcher 패키지 파헤쳐보기

기능 : os에 상관없이 url 정보를 넣으면 해당 url을 실행시킬 수 있음. 메일/문자/전화 포함

프로젝트 적용 : Drawer에 [개발자 연락처] 넣고 전화/문자/메일 연결 버튼 구현. and 스터디카페 주소 웹뷰로 띄우기

 

location, geolocator

기능 : 현재 위치 반환(location은 현재 실시간 위치 트래킹에 좀 더 특화된 것으로 보임)

프로젝트 적용 : 앱 실행 시 현재 위치 기반 데이터 띄워주기, 맵 이동 시 주변 데이터와의 거리 계산하여 데이터 변경해서 띄워주기

 

shared_preferences

기능 : 앱 설정과 같이 플랫폼 별 영구 저장소에 데이터를 저장

프로젝트 적용 : user의 앱 설정 정보를 user 데이터에 매핑시키지 않고 shared_preferences로 디바이스에 저장

 

flutter_slidable

기능 : ui패키지. 하단 스크린샷과 같이 슬라이드 시 버튼이 나오는 ui를 쉽게 구성 가능하다.

프로젝트 적용 : 개발자 연락 버튼을 슬라이드로 만들어 슬라이드 시 문자/전화/메일 선택가능하게 적용

convex_bottom_bar

기능 : 최근 많이 보이는 하단 스크린샷과 같이 이쁜 네비게이션 바를 만들 수 있다.

프로젝트 적용 : 네비게이션 할 기능이 없으니 구글맵 스크린에 버튼 대용으로 사용

sqflite

기능 : 플러터용 로컬 데이터베이스 구축 가능

프로젝트 적용 : 앱 초기 실행 시 api 1회 호출 후 데이터베이스에 쓴 이후에 바로 DB접근해서 데이터 가져옴으로써 탐색 속도 향상

 

google_fonts

기능 : 구글에서 제공하는 폰트를 손쉽게 플러터에 적용 가능

프로젝트 적용 : 프로젝트 전체 스타일에 구글 폰트 마음에 드는것 적용

json_serializable

기능 : JSON 데이터를 손쉽게 Dart 클래스로 변환하여 프로젝트 내에서 쉽게 사용하도록 자동 파일 생성

프로젝트 적용 : Json_to_dart 구현 방법 중 하나로 공부

 

sign_in_with_apple

기능 : 애플 로그인 기능 제공

프로젝트 적용 : 현재 구글 로그인만 적용되었는에 애플 로그인까지 확장

 

connectivity  

2020/10/29 - [Tech/flutter] - [flutter] favorites 공략 Connectivity 패키지 파헤쳐보기

기능 : 현재 인터넷에 연결 되어있는지(wifi/mobile data), 무엇으로 연결되어있는지 확인 가능

프로젝트 적용 : 영상 출력 시 와이파이 / 셀룰러 데이터 사용 여부 토스트로 경고

 

device_info

기능 : 현재 앱을 사용하고 있는 디바이스 정보(os, 핸드폰 기종 등) 반환

프로젝트 적용 : 버그리포트 버튼을 누르면 버그 상황(사용자가 입력), 핸드폰 기종, 시간, os를 Firebase에 저장

 

share

기능 : 공유하고자 하는 기능들을 손쉽게 공유하게 도와주는 패키지

프로젝트 적용 : 구글맵에서 cctv 영상 볼 경우 하단에 url 공유 버튼 추가해서 공유 기능 적용

 

sensors

기능 : 기기 자체의 센서에서 데이터 가져올 수 있는 기능(가속도 / 기울기)

프로젝트 적용 : 핸드폰 흔들면 지도에서 현재 내 위치로 포커싱 이동

 

battery

기능 : 배터리 몇퍼센트 남았는지 확인 가능

프로젝트 적용 : n% 미만 배터리일 경우 cctv 영상 재생 안해줌

 

path_provider

기능 : 핸드폰 내 각종 디렉토리에 path에 접근 가능하게 하는 플러그인

프로젝트 적용 : 미정. 좀 더 뜯어보고 적용 가능 여부 확인 필요

 

package_info

기능 : 현재 앱 패키지 정보 반환

프로젝트 적용 : Drawer에서 앱이름, 버전, 빌드넘버 등 작은 팝업 출력

 

 

총 18개의 패키지가 있고, 절반 정도는 정말 데이터를 반환해주는 역할만 하는 가벼운 패키지들이라 적용 난이도가 클 것 같지 않습니다.

한번 다 적용하면서 훑고 난 이후에 새로 보이는 패키지나 정말 유용한 패키지 모음이 있다면 또 공유드리겠습니다.

 

직접 만든 패키지를 실제로 배포해보는 것도 재미있는 경험이 될 것 같아요.

실제 '좋아요'를 받으면 인스타 좋아요보다 100배 더 보람찬 경험이 될 것 같네요.ㅎㅎ

댓글